上几篇文章主要讲了《实战项目:设计实现一个流程编排框架(分析)》《实战项目:设计实现一个流程编排框架(设计》《实战项目:设计实现一个流程编排框架(实现)》,我们今天主要讲一下基于分析、设计、实现的框架怎么满足一些基本场景。
方法节点
流程
流程执行三个方法节点,每个节点做+1操作,初始化count=0,最后输出结果count=3;
文件定义
name: addCount
id: test1
desc: 方法节点执行
input: com.service.flow.sample.common.test1.Test1Input
output: com.service.flow.sample.common.test1.Test1Output
temp: com.service.flow.sample.common.test1.Test1Temp
startNode: node1
nodes:
- node:
id: node1
name: methodNode1
component: com.service.flow.sample.common.test1.Test1Component:count
desc: 数量+1
input: com.service.flow.sample.common.test1.Test1Input
type: method
next: node2
- node:
id: node2
name: methodNode2
component: com.service.flow.sample.common.test1.Test1Component:count
desc: 数量+1
input: com.service.flow.sample.common.test1.Test1Input
type: method
next: node3
- node:
id: node3
name: methodNode3
component: com.service.flow.sample.common.test1.Test1Component:count
desc: 数量+1
input: com.service.flow.sample.common.test1.Test1Input
type: method
执行结果
2020-06-25 12:45:02.974 INFO 13808 --- [ main] com.service.flow.web.api.FlowHandler : result:Test1Input{count=3}
2020-06-25 12:45:02.976 INFO 13808 --- [ main] com.service.flow.web.api.FlowHandler : record:Flow:test1->Node:methodNode1->Node:methodNode2->Node:methodNode3
2020-06-25 12:45:02.976 INFO 13808 --- [ main] com.service.flow.web.api.FlowHandler : totalTime:16ms
Bean节点
流程
流程执行三个bean节点,每个节点做+1操作,初始化count=0,最后输出结果count=3;
文件定义
name: addCount
id: test2
desc: bean节点执行
input: com.service.flow.sample.common.test2.Test2Input
output: com.service.flow.sample.common.test2.Test2Output
temp: com.service.flow.sample.common.test2.Test2Temp
startNode: node1
nodes:
- node:
id: node1
name: beanNode1
component: test2Component:count
desc: 数量+1
input: com.service.flow.sample.common.test2.Test2Input
type: bean
next: node2
- node:
id: node2
name: beanNode2
component: test2Component:count:count
desc: 数量+1
input: com.service.flow.sample.common.test2.Test2Input
type: bean
next: node3
- node:
id: node3
name: beanNode3
component: test2Component:count
desc: 数量+1
input: com.service.flow.sample.common.test2.Test2Input
type: bean
执行结果
2020-06-25 12:45:32.976 INFO 11796 --- [ main] com.service.flow.web.api.FlowHandler : result:Test1Input{count=3}
2020-06-25 12:45:32.977 INFO 11796 --- [ main] com.service.flow.web.api.FlowHandler : record:Flow:test2->Node:beanNode1->Node:beanNode2->Node:beanNode3
2020-06-25 12:45:32.977 INFO 11796 --- [ main] com.service.flow.web.api.FlowHandler : totalTime:14ms
条件节点(循环节点)
流程
流程开始执行条件节点,初始化count=0;beanNode2每次做+1操作,当count>=5时,执行节点beanNode3,做+5操作,结果count=10;
文件定义
name: loop
id: test3
desc: 循环点执行
input: com.service.flow.sample.common.test3.Test3Input
output: com.service.flow.sample.common.test3.Test3Output
temp: com.service.flow.sample.common.test3.Test3Temp
startNode: node1
nodes:
- node:
id: node1
name: conditionNode1
component: count<5:node2,count>=5:node3
desc: 数量条件判断
type: condition
- node:
id: node2
name: methodNode2
component: test3Component:count
desc: 数量+1
input: com.service.flow.sample.common.test3.Test3Input
type: bean
next: node1
- node:
id: node3
name: methodNode3
component: test3Component:count5
desc: 数量+5
input: com.service.flow.sample.common.test3.Test3Input
type: bean
执行结果
2020-06-25 12:46:35.852 INFO 19920 --- [ main] com.service.flow.web.api.FlowHandler : result:Test1Input{count=10}
2020-06-25 12:46:35.854 INFO 19920 --- [ main] com.service.flow.web.api.FlowHandler : record:Flow:test3->Node:conditionNode1->Node:methodNode2->Node:conditionNode1->Node:methodNode2->Node:conditionNode1->Node:methodNode2->Node:conditionNode1->Node:methodNode2->Node:conditionNode1->Node:methodNode2->Node:conditionNode1->Node:methodNode3
2020-06-25 12:46:35.854 INFO 19920 --- [ main] com.service.flow.web.api.FlowHandler : totalTime:63ms
服务节点
流程
现在服务结果没有具体实现,空跑交易,需要交易框架自己扩展;
文件定义
name: service
id: test4
desc: 服务节点执行
input: com.service.flow.sample.common.test3.Test3Input
output: com.service.flow.sample.common.test3.Test3Output
temp: com.service.flow.sample.common.test3.Test3Temp
startNode: node1
nodes:
- node:
id: node1
name: serviceNode1
component: /test:post:testApplication
desc: 方法节点调用
input: com.service.flow.sample.common.test3.Test3Input
type: service
执行结果
2020-06-25 12:47:41.366 INFO 16272 --- [ main] com.service.flow.web.api.FlowHandler : result:com.service.flow.model.BaseOutput@660591fb
2020-06-25 12:47:41.366 INFO 16272 --- [ main] com.service.flow.web.api.FlowHandler : record:Flow:test4->Node:serviceNode1
2020-06-25 12:47:41.366 INFO 16272 --- [ main] com.service.flow.web.api.FlowHandler : totalTime:14ms
子流程节点
流程
定一个一个子节点调用第一个流程,最终结果count=3
文件定义
name: subflow
id: test5
desc: 子流程节点执行
input: com.service.flow.sample.common.test3.Test3Input
output: com.service.flow.sample.common.test3.Test3Output
temp: com.service.flow.sample.common.test3.Test3Temp
startNode: node1
nodes:
- node:
id: node1
name: subFlowNode1
component: test3
desc: 子流程节点
input: com.service.flow.sample.common.test3.Test3Input
type: subflow
执行结果
2020-06-25 12:54:36.163 INFO 17456 --- [ main] com.service.flow.web.api.FlowHandler : result:Test1Input{count=3}
2020-06-25 12:54:36.165 INFO 17456 --- [ main] com.service.flow.web.api.FlowHandler : record:Flow:test1->Node:methodNode1->Node:methodNode2->Node:methodNode3
2020-06-25 12:54:36.165 INFO 17456 --- [ main] com.service.flow.web.api.FlowHandler : totalTime:7ms
2020-06-25 12:54:36.165 INFO 17456 --- [ main] com.service.flow.web.api.FlowHandler : result:Test1Input{count=3}
2020-06-25 12:54:36.165 INFO 17456 --- [ main] com.service.flow.web.api.FlowHandler : record:Flow:test5->Node:subFlowNode1
2020-06-25 12:54:36.165 INFO 17456 --- [ main] com.service.flow.web.api.FlowHandler : totalTime:20ms