您可以使用任务(Task)状态来调用集成服务API,完成复杂的工作流程。本文介绍任务状态的基本概念及其相关使用示例,指导您利用任务状态来调用集成服务API。
基本概念
任务(Task)状态主要用于调用其他集成服务API来完成特定任务。利用任务类型状态可以执行一个函数调用,调用阿里云服务API,也可以通过HTTP/HTTPS等通用协议发起第三方服务调用。在流程定义语言中,我们通过声明State的类型为‘Task’标记当前状态是一个任务类型的状态。
任务状态包含以下属性。
字段 | 类型 | 是否必选 | 描述 | 示例值 |
Name | string | 是 | 状态名称。 | my-state-name |
Description | string | 否 | 状态描述。 | describe it here |
Type | string | 是 | 状态类型。 | Task |
Action | string | 是 | 用于定义工作流中每个任务要执行的具体动作。这通常是对应某个云服务产品的API名称,或者是集成服务的特定操作名称。遵循 <产品名>:<APIName>。 | FC:InvokeFunction |
TaskMode | enum | 否 | 任务调用模式,云工作流提供3种任务类型,具体类型描述细节参考服务集成模式。
| WaitForCustomCallback |
InputConstructor | map[string]any | 否 | 输入构造器。 | 请参见输入和输出 |
Parameters | map[string]any | 否 | 请求调用参数规范;对应Action行为定义的具体调用参数规范。 可使用常量或JsonPath进行参数赋值。 | 参数规范请参见集成简介 |
Timeout | string | 否 | 调用最大超时时间,单位为秒。取值范围为[0,604800],为0表示Task永远不会超时。 | 30 |
支持表达式构造,您可以根据上下文动态设置该值。 | Timeout.$: $Input.timeout | |||
Retry | map[string]any | 否 | 错误重试策略配置。 | 请参见错误处理 |
Catch | map[string]any | 否 | 错误捕获策略配置。 | 请参见错误处理 |
OutputConstructor | map[string]any | 否 | 输出构造器。 | 请参见输出构造器 |
Next | string | 否 | 当前状态的下一个状态。当End取值为true时,无需指定。 | my-next-state |
End | bool | 否 | 是否为当前作用域的终结节点。 | true |
调用示例
调用函数计算
通过声明Task
类型的State
,利用Parameters
字段,按照函数计算调用参数规范,指定需要调用函数的信息,具体参数规范请参见配置调用参数。函数调用既可以通过优化集成方式调用,也可以直接使用对应的阿里云OpenAPI调用。
Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: 同步调用函数示例
States:
- Name: 同步调用函数示例
Type: Task
TaskMode: RequestComplete
Action: FC:InvokeFunction
Parameters:
resourceArn: acs:fc:::functions/myFunction1/LATEST
invocationType: Sync
body:
key: name
Next: 异步调用函数示例
- Type: Task
Name: 异步调用函数示例
Action: FC:InvokeFunction
TaskMode: RequestComplete
Parameters:
invocationType: Async
resourceArn: acs:fc:{region}:{accountID}:functions/myFunction/LATEST
body:
key: name
Next: SucceededExit
- Type: Pass
Name: SucceededExit
End: true
调用阿里云服务API
按照阿里云OpenAPI规范,调用相应的OpenAPI。例如 ECS:DescribeInstances。
Type: StateMachine
SpecVersion: v1
Name: MyWorkflow
StartAt: DescribeInstances
States:
- Type: Task
Name: DescribeInstances
Action: ECS:DescribeInstances
TaskMode: RequestComplete
Parameters:
RegionId: cn-hangzhou
VpcId: vpc-bp11y195luy47h8****
VSwitchId: vsw-bp1wb297ekw7xyh****
End: true
调用外部服务并配置Task超时以及Catch
该示例调用一个外部的HTTP服务,集成模式为WaitForCustomCallback,并为任务配置了1个小时的超时时间。如果任务在1小时内未能执行完成,则工作流将抛出错误,并被Catch配置的规则进行捕获。
Type: StateMachine
Name: MyWorkflow
SpecVersion: v1
StartAt: SubmitTask
States:
- Type: Task
Name: SubmitTask
Action: HTTP:Request
TaskMode: RequestComplete
Timeout.$: $Input.timeout
Parameters:
method: POST
url: https://*****
body:
taskName: fly
headers:
Content-Type: multipart/form-data
Catch:
- Errors:
- FnF.TaskTimeout
Description: '错误捕获规则 #1'
Next: NotifyOnTaskTimeout
OutputConstructor:
ErrorCode: TaskTimeout
ErrorMessage: Task timed out.
End: true
- Type: Task
Name: NotifyOnTaskTimeout
Action: HTTP:Request
TaskMode: RequestComplete
Parameters:
method: POST
url: https://******
body:
taskName: fly
errorCode.$: $Input.ErrorCode
errorMessage.$: $Input.ErrorMessage
headers:
Content-Type: multipart/form-data
End: true
Task超时参数从执行输入中获取,可通过如下的输入发起执行:
{
"timeout": 10
}
如果Task未在规定时间内完成,则超时错误会被捕获,工作流会继续执行到NotifyOnTaskTimeout节点,发送一条Task执行超时的通知。