Solon v3.1.2

flow - 基础知识(概念定义、配置字典)

</> markdown

Solon Flow 可提供通用流编排能力。支持元信息配置,支持开放式的驱动定制(像 JDBC 有 MySQL 或 PostgreSQL 等不同驱动一样)。可用于支持:

  • 可用于计算(或任务)的编排场景
  • 可用于业务规则和决策处理型的编排场景
  • 可用于办公审批型(有状态、可中断,人员参与)的编排场景
  • 可用于长时间流程(结合自动前进,等待介入)的编排场景

自身也相当于一个低代码的运行引擎(单个 yml 文件,也可满足所有的执行需求)。

1、主要概念

主要概念:

  • 链、节点(可带任务)、连接(可带条件)
  • 节点任务组件接口(TaskComponent)
  • 流引擎(用于执行链),流上下文,流驱动器

概念关系描述(就像用工具画图):

  • 一个链(Chain),会有多个节点(Node)组成(可称为“编排”)。
  • 一个节点(Node),会有多个连接(Link,也叫“流出连接”)连向别的节点。
    • 连接向其它节点,称为:流出连接。
    • 被其它节点连接,称为:流入连接。
  • 一个链“必须有且只有”一个 start 类型的节点,且从 start 节点开始,顺着连接(Link)流出。
  • 流引擎在执行链的过程,可以有上下文参数(FlowContext),可以被阻断分支或停止执行(可支持有状态的审批模式)

通俗些,一个(或“条”)链就是通过 “点”(节点) + “线”(连接)来描述一个流程图结构。

2、配置字典参考

  • Chain 配置属性
属性数据类型需求描述
idString必填链Id(要求全局唯一)
titleString 显示标题
driverString 驱动器(缺省为默认驱动器)
metaMap 元信息(用于应用扩展)
layoutNode[] 编排(或布局)
  • Node ,配置属性(注:仅 activity 类型节点,支持 task 配置)
属性数据类型需求描述
idString 节点Id(要求链内唯一)
//不配置时,会自动生成
typeNodeType 节点类型
//不配置时,缺省为 activity 类型
titleString 显示标题
metaMap 元信息(用于应用扩展)
linkString or Link
String[] or Link[]
连接(支持单值、多值)
//不配置时,会自动连接后一个节点
taskString 任务描述(会触发驱动的 handleTask 处理)
whenString 执行任务条件描述(会触发驱动的 handleTest 处理)

link 全写配置风格为 Link 类型结构;简写配置风格为 Link 的 nextId 值(即 String 类型)

  • Link 配置属性
属性数据类型需求描述
nextIdString必填后面的节点Id
titleString 显示标题
metaMap 元信息(用于应用扩展)
conditionString 流出条件描述(会触发驱动的 handleTest 处理)
  • 节点类型(NodeType 枚举成员)
描述任务连接条件可流入
连接数
可流出
连接数
图例参考
start开始//01
activity活动节点(缺省类型)可有/1...n1
inclusive包容网关(类似多选)/支持1...n1...n
exclusive排它网关(类似单选)/支持1...n1...n
parallel并行网关(类似全选)//1...n1...n
end结束//1...n0

配置示例(支持 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!\");"}

简化模式,可为业务规则编排时带来很大方便。