Serverless 工作流支持与多个云服务集成,即将其他服务作为任务步骤的执行单元。服务集成方式由FDL语言表达,在任务步骤中,您可以使用resourceArn
来定义集成的目标服务,使用pattern
定义集成模式。本文主要介绍了服务集成的相关内容,包括集成模式、上下文对象和已集成云服务。
关于可使用的云服务列表,请参见已集成云服务。
集成模式
目前Serverless 工作流支持三种不同的集成模式。
请求响应模式:调用第三方服务,在Serverless 工作流获得HTTP响应后进入下一个步骤。默认模式是请求响应模式。
在FDL步骤中使用
resourceArn
描述目标服务,使用pattern: requestResponse
(可选,若无该参数则为默认模式)描述服务集成模式。该模式下Serverless 工作流将在调用接口返回后立刻进入到下一步骤的执行。以子流程功能(Serverless 工作流作为被集成服务)为例。version: v1 type: flow steps: - type: task name: testSubflow resourceArn: acs:fnf:::flow/flowABC #描述子流程。 pattern: requestResponse #描述服务集成模式:默认(请求响应)模式。 - type: pass name: dummy
该示例展示了当
testSubflow
步骤执行时会触发一个flowABC
流程。触发成功后,将进入下一步骤dummy
,flowABC
流程可能仍然正在执行。同步模式:通常这类服务提供了异步执行接口,Serverless 工作流调用异步接口成功后会等待,直到相关任务完成并获得了执行结果,Serverless 工作流才会继续执行下一个步骤。
对于某些集成服务,Serverless 工作流可以等到该服务的任务运行完成后再进入下一个步骤。一般这类服务为执行某个任务提供了任务启动(异步)的接口,需要提交任务并等待任务执行完成再进行下一步骤。
在FDL步骤中使用
resourceArn
描述目标服务,使用pattern: sync
描述服务集成模式。以子流程功能(Serverless 工作流作为被集成服务)为例。version: v1 type: flow steps: - type: task name: testTask resourceArn: acs:fnf:::flow/flowABC #描述子流程。 pattern: sync #描述服务集成模式:同步。 - type: pass name: dummy
该示例展示了当该步骤执行时会触发一个Serverless 工作流流程。触发成功后将等待该流程的执行结果,执行完成后将进入下一步骤。当
testTask
步骤执行时会触发一个flowABC
流程。触发成功后,将等待该流程的执行结果,执行完成后才进入下一步骤dummy
,flowABC
流程已经执行完成。等待回调模式:调用第三方服务并传入任务令牌,Serverless 工作流将进入等待,直到您手动使用该令牌通知流程执行结果后才会继续执行下一个步骤。
回调任务将使当前流程在任务调度点暂停,直到收到任务令牌的回调指令。在FDL步骤中使用
resourceArn
描述目标服务,使用pattern: waitForCallback
描述服务集成模式。以子流程功能(Serverless 工作流作为被集成服务)为例。version: v1 type: flow steps: - type: task name: testSubflow resourceArn: acs:fnf:::flow/flowABC #描述子流程。 pattern: waitForCallback #描述服务集成模式:等待回调。 - type: pass name: dummy
该示例展示了当
testSubflow
步骤执行时会触发一个flowABC
流程。触发成功后,将暂停流程执行,等待回调(通过ReportTaskSucceed
或ReportTaskFailed
API)。在收到回调请求并处理完成后,流程将进入下一步骤dummy
。flowABC
流程可能已经执行完成,也可能还在执行。其中回调是由您发起。
上下文对象
上下文对象是流程执行实例的内部JSON对象,其中包含了关于执行、步骤的相关信息。该对象提供外部访问方式,在inputMappings中您可将context对象映射到具体变量中来实现访问。目前开放的context对象结构如下所示。
"context": {
"flow": {
// 本流程的唯一标识符id和流程名称、字符串类型。
"id": "val1",
"name "val2",
},
"execution": {
// 本执行的名称。
"name": "val3"
},
"step": {
// 本步骤的名称。
"name": "val4"
// 本步骤的事件ID。
"eventId": "val5"
// 当前循环的次数,在循环步骤(foreach)下可以使用。
"IterationIndex": "val6",
},
"task": {
// 本步骤的标识符,为一个字符串,在回调模式(waitForCallback)下可以使用。
"token": "val7",
},
}
使用方式:例如集成Serverless 工作流自身服务,需要在子流程中获取调用其父流程的相关信息,并获取调用步骤的taskToken用于回调,您可以通过以下方式获取这两个字段。
...
inputMappings:
- target: current_flow_name
source: $context.flow.name
- target: current_execution_name
source: $context.execution.name
- target: current_step_task_token
source: $context.task.token
已集成云服务
方案 | 请求响应(requestResponse) | 同步(sync) | 等待回调(waitForCallback) |
函数计算(FC) | 支持 | 不支持 | 不支持 |
轻量消息队列(原 MNS)队列触发器 | 支持 | 不支持 | 支持 |
轻量消息队列(原 MNS)主题触发器 | 支持 | 不支持 | 支持 |
Serverless 工作流(SWF) | 支持 | 支持 | 支持 |