流程编排
消息节点:接收消息后触发节点执行
任务:脚本任务、用户任务、消息任务
事件:开始事件、结束事件、消息接收事件
网关:排他网关、并行网关、包容网关
如果仅是服务编排场景,则流程的执行仅依赖内存和CPU,并且是在流程客户端执行,性能上依赖于客户端服务器的性能,普通笔记本实测1秒可执行一个流程请求的1w+个节点,1秒可执行1万+次含1个节点的流程请求
如果需要流程状态管理和流程持久化功能,流程引擎在执行时会到流程服务端查询和保存流程实例和流程节点的状态,性能上主要依赖于数据库的查询和插入效率
对于流程任务审批功能,流程的任务审批流转是在服务端执行,一方面取决于流程服务端的计算性能,另一方面同样取决于数据库的查询和插入效率
<dependency>
<groupId>com.jd.easyflow</groupId>
<artifactId>easyflow-flow</artifactId>
<version>{替换为最新版本}</version>
</dependency>
2)编写流程定义文件,以node001->node002→node003的执行顺序为例:
{"id": "quickstart_001", "name": "Quick Start 001",
"nodes": [
{"id": "node001","name": "Node001","action": {"createExp": "new com.jd.easyflow.flow.quickstart.QuickStart001Node01Action()"},"start": true,"post": {"to": "node002"}},
{"id": "node002","name": "Node002","action": {"createExp": "new com.jd.easyflow.flow.quickstart.QuickStart002Node01Action()"},"post": {"to": "node003"}},
{"id": "node003","name": "Node003","action": {"createExp": "new com.jd.easyflow.flow.quickstart.QuickStart003Node01Action()"}}
]
}
FlowEngineImpl flowEngine = new FlowEngineImpl();
flowEngine.setFlowPath("classpath:flow/quickstart/quickstart_001.json");
flowEngine.init();
Spring环境可直接定义FlowEngineImpl bean.
FlowParam param = new FlowParam("quickstart_001");
FlowResult result = flowEngine.execute(param);
完整测试用例的执行结果打印如下:
[main ] INFO FlowEngineImpl - Start parsing definition files:easyflow-flow/target/test-classes/flow/quickstart/quickstart_001.json
[main ] INFO FlowEngineImpl - SART EXECUTE FLOW, flowId:quickstart_001 nodeIds:null
[main ] INFO BaseFlowRunner - EXECUTE NODE:node001
[main ] INFO QuickStart001Node01Action - Execute Node 001
[main ] INFO BaseFlowRunner - NEXT NODES:node002
[main ] INFO BaseFlowRunner - EXECUTE NODE:node002
[main ] INFO QuickStart002Node01Action - Execute Node 002
[main ] INFO BaseFlowRunner - NEXT NODES:node003
[main ] INFO BaseFlowRunner - EXECUTE NODE:node003
[main ] INFO QuickStart003Node01Action - Execute Node 003
[main ] INFO BaseFlowRunner - NEXT NODES:
[main ] INFO QuickStartTest - Execute finish, current node is:node003
流程:一个业务流程的抽象
节点:流程的组成单位,一个节点能够执行节点动作同时可返回后继节点
前处理器:判断该节点是否可以执行动作
节点动作:真实的业务功能处理
后处理器:负责计算后续节点
预检查
执行Action
计算后继节点ID并返回
模型简单:核心模型概念就是节点的流转
扩展简单:提供了监听器、过滤器功能,方便横向切面;节点支持自定义实现
定义简单:只需要通过JSON进行节点流转逻辑配置便可,也支持BPMN格式
运行简单:代码调用流程引擎,传入流程ID和业务参数便可
使用简单:引入组件包便可使用,比较轻量
流程可编排:将业务流程抽象为软件流程,保证软件是现实的真实反映;不同场景可定义不同流程,且流程易修改
功能松耦合:将业务节点抽象为软件流程节点,一方面实现功能的松耦合,另一方面实现节点的可复用
流程可视化:所见即所得,方便业务产品人员和软件研发人员基于同一语言的交流,也便于流程监控
业务流程是有明显的多个节点组成
希望流程可灵活变更
业务流程级别比程序流程高一层,在编程语言级别难以聚合和治理(如一个流程即需要前台操作,又有外系统参与,又有后台操作,在实现上入口分散)
-end-