简介
云工作流通过Operation
类型的状态调用各种服务,支持三种服务集成模式来控制任务状态的流转。本文详细介绍请求响应(RequestComplete)、等待系统回调(WaitForSystemCallback) 和 等待任务令牌(WaitForTaskToken) 三种集成模式的定义、应用场景及示例。
云工作流支持以下三种集成模式,但并非所有服务都支持全部模式。关于具体服务的支持情况,请参见集成类型与模式支持:
请求响应(RequestComplete):同步调用,等待服务响应后继续流程。
等待系统回调(WaitForSystemCallback):异步调用,流程挂起直到系统回调。
等待任务令牌(WaitForTaskToken):异步调用,用户获取任务令牌后手动回调。
请求响应(RequestComplete)
定义:默认集成模式,发起
Operation
状态调用后,系统等待服务返回响应,再继续后续流程。特点:同步执行,立即获取调用结果,适合实时任务。
适用场景:快速API调用、数据查询或简单计算。
示例:同步调用函数计算
以下示例通过RequestComplete
模式调用函数计算服务,等待函数返回结果后结束流程。
specVersion: "0.8"
version: "1.0"
name: "demo"
start: "InvokeFunction"
states:
- name: "InvokeFunction"
type: "Operation"
actions:
- functionRef:
type: "cf:InvokeFunction"
arguments:
functionName: "demo_function"
qualifier: "LATEST"
invocationType: "sync"
body: ""
regionId: "bb9fdb42056f11eda1610242ac110002"
actionExecuteMode: "RequestComplete"
end: true
说明
actionExecuteMode: "RequestComplete"
指定使用同步调用invocationType: "sync"
确保函数同步执行
等待系统回调(WaitForSystemCallback)
定义:发起
Operation
状态调用后,状态挂起,被调用服务自动完成异步回调后继续执行。特点:适合异步任务,系统负责触发回调,减少轮询开销。
适用场景:函数计算异步调用(开发中,暂不支持)、子流程执行等需要系统自动完成的任务。
示例:等待系统回调执行工作流
以下示例使用WaitForSystemCallback
执行工作流,等待子工作流完成后执行自动回调。
specVersion: "0.8"
version: "1.0"
name: "demo"
start: "ExecuteWorkflow"
states:
- name: "ExecuteWorkflow"
type: "Operation"
actions:
- functionRef:
type: "cloudflow:executeWorkflow"
arguments:
workflowName: "demo-workflow"
workflowType: "standard"
executionName: "execution"
workflowInput:
$Context.Input: null
regionId: "bb9fdb42056f11eda1610242ac110002"
actionExecuteMode: "WaitForSystemCallback"
end: true
ExecuteWorkflow
任务开始后,首先通过cloudflow:executeWorkflow
集成发送异步执行请求,接下来进入submitted
状态,即等待回调状态。子工作流完成后,系统自动回调,更新ExecuteWorkflow
状态并继续执行。
等待任务令牌(WaitForTaskToken)
定义:发起
Operation
任务调用后,任务挂起,用户获取TaskToken后通过ReportTaskSuccess或ReportTaskFailure OpenApi触发回调,继续执行。特点:
提供任务令牌
{ $Context.taskToken }
,支持外部系统或用户自定义逻辑控制流程。相比轮询,回调模式降低延迟和服务器压力,扩展编排范围至任意计算资源。
适用场景::需要用户审批、外部微服务交互,如信用检查、订单审批。
示例:等待任务令牌调用函数计算
以下示例使用WaitForTaskToken
异步执行函数。
specVersion: "0.8"
version: "1.0"
name: "demo"
start: "InvokeFunction"
states:
- name: "InvokeFunction"
type: "Operation"
actions:
- functionRef:
type: "cf:InvokeFunction"
arguments:
functionName: "demo_function"
qualifier: "LATEST"
invocationType: "async"
body:
taskToken: "{ $Context.taskToken }"
regionId: "bb9fdb42056f11eda1610242ac110002"
actionExecuteMode: "WaitForTaskToken"
end: true
说明
actionExecuteMode: "RequestComplete"
指定使用等待任务令牌。invocationType: "async"
确保函数异步执行。taskToken: "{ $Context.taskToken }"
将taskToken放在函数请求body中。
InvokeFunction
任务开始后,通过cf:InvokeFunction
发送异步执行请求,然后进入等待回调状态。