flow - 基础知识(概念定义、配置字典)
Solon Flow 可提供通用流编排能力。支持元信息配置,支持开放式的驱动定制(像 JDBC 有 MySQL 或 PostgreSQL 等不同驱动一样)。可用于支持:
- 可用于计算(或任务)的编排场景
- 可用于业务规则和决策处理型的编排场景
- 可用于办公审批型(有状态、可中断,人员参与)的编排场景
- 可用于长时间流程(结合自动前进,等待介入)的编排场景
自身也相当于一个低代码的运行引擎(单个 yml 文件,也可满足所有的执行需求)。
1、主要概念
主要概念:
- 链、节点(可带任务)、连接(可带条件)
- 节点任务组件接口(TaskComponent)
- 流引擎(用于执行链),流上下文,流驱动器
概念关系描述(就像用工具画图):
- 一个链(Chain),会有多个节点(Node)组成(可称为“编排”)。
- 一个节点(Node),会有多个连接(Link,也叫“流出连接”)连向别的节点。
- 连接向其它节点,称为:流出连接。
- 被其它节点连接,称为:流入连接。
- 一个链“必须有且只有”一个 start 类型的节点,且从 start 节点开始,顺着连接(Link)流出。
- 流引擎在执行链的过程,可以有上下文参数(FlowContext),可以被阻断分支或停止执行(可支持有状态的审批模式)
通俗些,一个(或“条”)链就是通过 “点”(节点) + “线”(连接)来描述一个流程图结构。
2、配置字典参考
- Chain 配置属性
属性 | 数据类型 | 需求 | 描述 |
---|---|---|---|
id | String | 必填 | 链Id(要求全局唯一) |
title | String | 显示标题 | |
driver | String | 驱动器(缺省为默认驱动器) | |
meta | Map | 元信息(用于应用扩展) | |
layout | Node[] | 编排(或布局) |
- Node ,配置属性(注:仅 activity 类型节点,支持 task 配置)
属性 | 数据类型 | 需求 | 描述 |
---|---|---|---|
id | String | 节点Id(要求链内唯一) //不配置时,会自动生成 | |
type | NodeType | 节点类型 //不配置时,缺省为 activity 类型 | |
title | String | 显示标题 | |
meta | Map | 元信息(用于应用扩展) | |
link | String or Link String[] or Link[] | 连接(支持单值、多值) //不配置时,会自动连接后一个节点 | |
task | String | 任务描述(会触发驱动的 handleTask 处理) | |
when | String | 执行任务条件描述(会触发驱动的 handleTest 处理) |
link 全写配置风格为 Link 类型结构;简写配置风格为 Link 的 nextId 值(即 String 类型)
- Link 配置属性
属性 | 数据类型 | 需求 | 描述 |
---|---|---|---|
nextId | String | 必填 | 后面的节点Id |
title | String | 显示标题 | |
meta | Map | 元信息(用于应用扩展) | |
condition | String | 流出条件描述(会触发驱动的 handleTest 处理) |
- 节点类型(NodeType 枚举成员)
描述 | 任务 | 连接条件 | 可流入 连接数 | 可流出 连接数 | 图例参考 | |
---|---|---|---|---|---|---|
start | 开始 | / | / | 0 | 1 | ![]() |
activity | 活动节点(缺省类型) | 可有 | / | 1...n | 1 | ![]() |
inclusive | 包容网关(类似多选) | / | 支持 | 1...n | 1...n | ![]() |
exclusive | 排它网关(类似单选) | / | 支持 | 1...n | 1...n | ![]() |
parallel | 并行网关(类似全选) | / | / | 1...n | 1...n | ![]() |
end | 结束 | / | / | 1...n | 0 | ![]() |
配置示例(支持 yml 或 json):
# demo1.chain.yml(完整模式)
id: "c1"
layout:
- { id: "n1", type: "start", link: "n2"}
- { id: "n2", type: "activity", link: "n3", task: "System.out.println(\"hello world!\");"}
- { id: "n3", type: "end"}
3、链配置的简化模式说明
属性简化:
- 当没有
id
属性时,会按顺序自动生成(格式示例:"n-1") - 当没有
link
属性时,会按顺序自动连接后一个节点 - 当没有
type
属性时,缺省为activity
节点类型
节点简化:
- 当没有
type=start
节点时,按顺序第一个节点为开始节点 - 当没有
type=end
节点时,不影响执行
示例(基于上个链配置的简化):
# demo1.chain.yml(简化模式)
id: "c1"
layout:
- { task: "System.out.println(\"hello world!\");"}
简化模式,可为业务规则编排时带来很大方便。