流程引擎+自动推流
2023-03-06 14:13:13 0 举报
流程引擎
作者其他创作
大纲/内容
置当前节点为非活动节点
原生支持,流程编排时即可配置
open_flow_template开标流程模板
self.process处理
应用方案
引用
@onSuccess
自定义线程池创建/获取
chainNameNodeNamereturnNode
{ \"tempId\": \"6864a8d270af4b56b9bfe06330f46019\
执行继承NodeSwitchComponent类的process方法(eg: SwitchCmp.process())
失败后执行的流程:falseCaseExecutableItem.execute
动态构造回退流程Chain2
2. 流程发起
6. springbootmysql支持
[ { \"id\": \"03c69a4c95b111eaa5350242ac110002\
l
IfCondition.javaexecute
可通过对节点打标签解决一些复杂的业务场景(交易平台的复议流程)
并行编排(弱流程)
j
Node - 节点
+ isAccess(Integer slotIndex) //可执行判断+ execute(Integer slotIndex) //节点执行逻辑+ retry(NodeComponent instance) //重试+ getNextNodes(Node currNode) //获取下个节点列表
执行继承NodeComponent类的自定义节点(eg: ACmp.process())
http
c
f
h
SwitchCondition.javaexecute
流程回退
活动节点下移
httpchain_id
s
e
成功后执行的流程:trueCaseExecutableItem.execute
流程定义
公共流程1
继承
重新定位chain1活动节点
流程运行过程中的数据组件未做持久化设计,需自行设计,应对统计与监控的需求
self.beforeProcessself.processself.onSuccessself.afterProcess耗时合性能统计
for (Executable executableItem : this.getExecutableList()) { executableItem.setCurrChainId(this.getCurrChainId()); executableItem.execute(slotIndex); }
false
true
i
并行、弱流程情况下的流程下推以并行方式编排
NodeExecutor.javaexecute
并行组件的排他性支持
access
执行node_start_interface
for
条件编排
返回
实现
project_param_json
再次执行Condition
sys_flow_template评标流程模板
顺序编排
chainNameNodeName
b
match_param_json
流程下推
Node.javaexecute
公共流程1getIfNode().execute
SwitchCondition.java从metaDataMap中获取下个节点id
4. 数据留痕
a
并行编排
WhenCondition - 串行执行器
+ execute(Integer slotIndex) //条件执行逻辑+ retry(NodeComponent instance) //重试+ getNextNodes(Node currNode) //获取下个节点列表
5. 分布式事务管理
解决方案
开标
sys_flow_rule流程规则表
g
将process返回值(nodeId)存入metaDataMap
d
与liteflow中间件无关,本身就需要考虑的设计
下一节点执行node_start_interface
评标流程创建时
选择编排
x
chain1
如果是选择(switch)
节点执行:node_return_interface
2. 回调机制
NodeComponent.javaexecute
流程运行采用的是工作台模式,可方便嵌入业务代码。不过它采用的是一次发起走完一条流程,在节点状态管理上需做二次开发
执行chain2流程:execute2Resp
WhenCondition.javaexecute
Executable - 执行器接口
+ isAccess(String path)+ execute(List<String> pathList)
FlowExecutor - 流程规则执行器类
公共流程1getSwitchNode().execute
{ \"地区\": [ { \"title\": \"山西\
流程编排的规则支持很完整,满足所有的业务场景编排需求。流程节点间相互无耦合,可重复使用
原生支持,降低开发难度,有助于国产数据库的支持
1. 节点采用静态代码编写(@Component组件),流程采用liteflow提供的动态构造功能a) 项目创建时:根据业务系统的配置组装EL表达式b) 项目评审过程中(递补):方案一:根据业务要求更新EL表达式LiteFlowChainELBuilder.createChain().setChainName(\"chain2\").setEL( \
4. 重试机制
动态构造flow_chain、flow_node(入库,替换现有的eval_flow):1. sys_flow_template.temp_json2. eval_step
3. 动态修改流程
获取下个节点的执行器(Executable)(targetExecutor.execute
1. 节点状态管理
ThenCondition - 串行执行器
+ execute(Integer slotIndex) //条件执行逻辑+ retry(NodeComponent instance) //重试+ getNextNodes(Node currNode) //获取下个节点列表
执行选择处理的流程
循环编排
@isAccess
C
执行符合条件的流程
k
1. 流程编排
支持在项目启动时根据配置动态生成业务流程、项目运行时动态修改业务流程。支持主动刷新和被动监听刷新两种模式
执行chain1流程:execute2Resp
每个节点预先(eval_flow_reg)使用声明式组件定义成一个类
instance.isAccess()nodeExecutor.execute
将process返回值(true/flase)存入metaDataMap
DefaultNodeComponent - 默认组件实现类
+ isAccess(Integer slotIndex) //可执行判断+ execute(Integer slotIndex) //节点执行逻辑+ process() //业务逻辑处理+ onSuccess() //成功后回调方法+ onError() //失败后回调方法
FlowExecutor.javadoExecute
m
返回chainId
节点执行:node_end_interface
liteflow组件的应用点
rule_id
NodeIfComponent.javaprocess
[ { \"key\": \"FlowTemplateKey\
5. 标签(排他性支持)
NodeComponent - 普通组件抽象类
+ isAccess(Integer slotIndex) //可执行判断+ execute(Integer slotIndex) //节点执行逻辑+ process() //业务逻辑处理+ onSuccess() //成功后回调方法+ onError() //失败后回调方法
节点状态:0、1、2开标、评标系统如何应用,改动点回调机制:是做成组件还是服务角色的应用
评标
temp_json
1. 设计表 flow_node,存放节点实时状态2. 使用数据库配置 + http调用方式完成流程引擎服务对业务系统的回调3. 不同角色可走的流程设计成一个选择组件,选择条件在流程编排时就预先定义(如按角色类型定义枚举),项目运行时由业务系统传入判断值
liteflow与业务系统的交互可方便采用回调机制,但需要自行设计一套回调流程
如果是节点(Node)
NodeSwitchComponent.javaprocess
liteflow无角色概念,需要我们将角色转换成逻辑处理,如将不同角色可走的流程设计成一个选择组件
IfCondition.java从metaDataMap中拿到If执行过的结果
liteflow组件的补充点
3. 角色处理
如果是条件(if)
组合编排
sys_project_flow项目流程模板
执行继承NodeIfComponent类的process方法(eg: IfCmp.process())
重试逻辑
LiteFlow是基于逻辑的一次性流转,是一个无状态的规则引擎,不会停止在某个流程节点,因此没有节点状态,需要自行开发
ThenCondition.javaexecute
0 条评论
下一页