上幾篇文章主要講了《實戰項目:設計實現一個流程編排框架(分析)》《實戰項目:設計實現一個流程編排框架(設計》《實戰項目:設計實現一個流程編排框架(實現)》,我們今天主要講一下基於分析、設計、實現的框架怎麼滿足一些基本場景。
方法節點
流程
流程執行三個方法節點,每個節點做+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