flow - 节点类型说明 [重要]
2025年12月5日 上午9:23:14
节点类型(NodeType 枚举成员)
| 描述 | 执行任务 | 连接条件 | 多线程 | 可流入 连接数 | 可流出 连接数 | 备注 | |
|---|---|---|---|---|---|---|---|
| start | 开始 | / | / | / | 0 | 1 | |
| activity | 活动节点(缺省类型) | 支持 | / | / | 1...n | 1 | |
| inclusive | 包容网关(类似多选) | 支持? | 支持 | / | 1...n | 1...n | |
| exclusive | 排它网关(类似单选) | 支持? | 支持 | / | 1...n | 1...n | |
| parallel | 并行网关(类似全选) | 支持? | / | 支持 | 1...n | 1...n | |
| loop | 循环网关 | 支持? | / | / | 1 | 1 | v3.4.3 后支持 |
| end | 结束 | / | / | / | 1...n | 0 |
概念:
- 连接其它节点,称为:“流出连接”。
- 被其它节点连接,称为:“流入连接”。
- 一个节点的流经过程:“流入” -> “执行任务” -> “流出”。
- 每个任务(task),都可以带一个任务触发条件(when)
提醒:
- 网关的“执行任务”,v3.6.1 后支持
1、start (开始)
一个图,"必须有且只有”一个 start 节点,作为图的入口。之后顺着“连接”流出。
示例:
id: demo1
layout:
- type: start
- type: end
2、activity (活动)
activity 节点,主要用于触发处理任务事件。可以带一个任务触发条件(when)。
| 流入 | 流出 |
|---|---|
| 无限制性要求。 | 单“连接”流出 |
示例:
id: demo1
layout:
- type: start
- type: activity
task: 'System.out.println("hello world!");'
- type: end
3、inclusive (包容网关),相当于多选。要“成对”使用!
inclusive 节点,可以有多个流入连接,或多个流出连接。
| 流入(也可叫汇聚,或栏栅) | 流出 |
|---|---|
| (如果前面有 inclusive 流出)会等待所有满足条件的流入连接到齐后(起到聚合作用),才会往后流出。否则,无限制性要求。 | 只要满足条件的都可流出,相当于“多选”。 如果没有匹配的连接,则使用缺省(没有条件的连接)。 如果没有缺省,就结束了。 |
示例:
id: demo1
layout:
- type: start
- {type: inclusive, link: [{nextId: n1, when: 'b>1'}, {nextId: n2, when: 'a>1'}]} #流出
- {type: activity, task: "@Task1", id: n1, link: g_end}
- {type: activity, task: "@Task2", id: n2, link: g_end}
- {type: inclusive, id: g_end} #流入
- type: end
4、exclusive (排它网关),相当于单选
exclusive 节点,最多只能有一个流出连接。
| 流入 | 流出 |
|---|---|
| 无限制性要求。 | 只能有一个满足条件的连接可流出,相当于“单选”。 如果没有匹配的连接,则使用缺省(没有条件的连接)。 如果有多个满足条件的连接,则按优先级排序,最优先的流出。 如果没有缺省,就结束了。 |
示例:
id: demo1
layout:
- type: start
- {type: exclusive, link: [n1, {nextId: n2, when: 'a>1'}]} #流出
- {type: activity, task: "@Task1", id: n1, link: g_end}
- {type: activity, task: "@Task2", id: n2, link: g_end}
- {type: exclusive, id: g_end} #流入(也可以不需要,直接到 end)
- {type: end, id: end}
5、parallel (并行网关),相当于全选。要“成对”使用!
parallel 节点,可以有多个流入连接,或多个流出连接。
| 流入(也可叫汇聚,或栏栅) | 流出 |
|---|---|
| 会等待所有流入连接到齐后(起到聚合作用),才会往后流出。 | 所有连接都可流出,相当于“全选”。 |
示例:
id: demo1
layout:
- type: start
- {type: parallel, link: [n1, n2]} #流出
- {type: activity, task: "@Task1", id: n1, link: g_end}
- {type: activity, task: "@Task2", id: n2, link: g_end}
- {type: parallel, id: g_end} #流入
- type: end
6、loop (循环网关)//目前为预览状态(v3.4.3 后支持)
loop 节点,只能有一个流入连接,或一个流出连接。注意:要“成对”使用。
| 流入(也叫汇聚,或栏栅) | 流出(需要标注元数据) |
|---|---|
| 会等待遍历结束后(起到聚合作用),才会往后流出。 | 遍历集合并循环流出。 |
| 流出元数据 | 说明 |
|---|---|
$for | 项目变量名(遍历出的项目,将以此名推入上下文),后续节点可使用此变量 |
$in | 集合变量名(引擎会通过变量名,从上下文里取变量) |
示例:
id: demo1
layout:
- type: start
- {type: loop, meta: {"$for": "id", "$in": "idList"}} #流出(有,流出元数据)
- {type: activity, task: "@Job"}
- type: loop #流入
- type: end
7、end (结束)
end 节点,表示没有流出了,结束了。
示例:
id: demo1
layout:
- type: start
- type: end