并行(parallel)节点
更新时间:2024-07-05
概述
parallel 节点用来并行执行多个节点,它定义了多个分支,每个分支内包含一系列串行的节点。
parallel 会把自己经过 stateDataFilter
过滤后的输入数据,拷贝给每个分支的开始节点,作为它们的输入数据。在所有分支执行结束后,parallel 再把分支的输出汇总,放入自己的节点数据内并输出。若其中一个分支执行失败,那么 parallel 节点也会失败。
参数
以下为 parallel 节点所包含的参数字段:
字段 | 类型 | 描述 |
---|---|---|
type(必需) | string | 节点类型,值为 "parallel" |
name(必需) | string | 节点名称 |
branches(必需) | array of branch | 分支数组 |
next(二选一) | string | 当前节点运行结束后,下一个要运行的节点 |
end(二选一) | bool | 设定 end 参数为 true,表示该节点运行结束后,没有继续要运行的节点。只可以定义 next 或 end 中的一个 |
description(可选) | string | 节点描述信息 |
stateDataFilter(可选) | object | 节点输入输出过滤,参考输入与输出 |
retry(可选) | object | 错误重试定义,参考错误重试 |
catch(可选) | object | 错误捕获定义,参考错误捕获 |
分支 branch 的定义:
字段 | 类型 | 描述 |
---|---|---|
start(必需) | string | 分支的开始节点 |
states(必需) | array of state | 该分支的节点数组 |
可以看到,分支的定义其实就是一个简化版的完整工作流的定义。
示例
示例工作流定义如下,parallel 节点定义了两个分支:
name: demo
start: hello
states:
- type: parallel
name: hello
branches:
- start: func1
states:
- type: operation
name: func1
resource: "brn:bce:cfc:su:123456:function:test1:$LATEST"
next: func2
- type: operation
name: func2
resource: "brn:bce:cfc:su:123456:function:test2:$LATEST"
end: true
- start: pass1
states:
- type: pass
name: pass1
data:
bce: xflow
end: true
next: succ
- type: succeed
name: succ
假定工作流的输入是 {"hello":"world"}
,那么 parallel 节点及两个分支的输入数据均为 {"hello":"world"}
。
假定分支1的输出数据是 {"result":"success"}
,分支2从定义可知输出数据是 {"hello":"world", "bce":"xflow"}
,
最终 parallel 的输出数据是
{
"hello":"world",
"bce":"xflow",
"result":"success"
}