本文介绍了工作流的设计与实现求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。
对技术面试,学习经验等有一些体会,在此分享。
1. 为什么要使用工作流
- 一笔交易的完成存在明显的多步子交易,存在与多个系统交互的情形。
- 每一步子交易都可能存在失败的可能,失败后需要回滚已完成的部分交易或者需要重试去继续剩余的子交易。
- 工作流的设计为一笔交易的多步处理进行了解耦,每一步都是独立的节点,每一个节点的处理都可以在不同的工作流中复用。
- 工作流的设计可以快速定位多步交易出问题时的位置,定位到有问题的子交易并依据配置自动完成异常处理。
- 工作流的设计可以提供通用的异常处理方案,例如:超时关单、调单查询、交易失败自动回滚等。
2. 工作流的基本设计
- 工作流节点WorkflowNode_1成功进入节点WorkflowNode_2,节点WorkflowNode_2处理成功后进入节点WorkflowNode_3,节点WorkflowNode_3处理成功后工作流结束。
2.工作流节点处理出现异常时进入ExceptionWorkflowNode(异常处理)节点处理,处理完成后工作流结束。 - 工作流节点处理失败时进入FailWorkflowNode(失败处理)节点处理,处理结束后工作流结束。
4.工作流节点如何确定“成功”、“异常”、“失败”后进入哪个节点去完成后续处理呢?这里设计“路由”功能,每一个节点处理出结果(成功、异常、失败等)时,
都会调用“路由”来确定下一个处理节点,直到工作流结束。 - 工作流“路由”依赖于XML配置,依据配置“路由”可以确定各个节点处理结束后应该进入的“下一个节点”。此例中的路由配置如下:
<bean id="workflowRoute" class="me.freetiger.workflow.WorkflowRoute"> <!-- 测试工作流 --> <property name="testWorkflow"> <map> <!-- 节点WorkflowNode_1的路由配置 --> <entry key="WorkflowNode_1:SUCCESS" value="WorkflowNode_2"/> <entry key="WorkflowNode_1:FAIL" value="FailWorkflowNode"/> <entry key="WorkflowNode_1:EXCEPTION" value="ExceptionWorkflowNode"/> <!-- 节点WorkflowNode_2的路由配置 --> <entry key="WorkflowNode_2:SUCCESS" value="WorkflowNode_3"/> <entry key="WorkflowNode_2:FAIL" value="FailWorkflowNode"/> <entry key="WorkflowNode_2:EXCEPTION" value="ExceptionWorkflowNode"/> <!-- 节点WorkflowNode_3的路由配置 --> <entry key="WorkflowNode_3:SUCCESS" value="END"/> <entry key="WorkflowNode_3:FAIL" value="FailWorkflowNode"/> <entry key="WorkflowNode_3:EXCEPTION" value="ExceptionWorkflowNode"/> <!-- 节点ExceptionWorkflowNode的路由配置 --> <entry key="ExceptionWorkflowNode:SUCCESS" value="END"/> <!-- 节点FailWorkflowNode的路由配置 --> <entry key="FailWorkflowNode:SUCCESS" value="END"/> </map> </property> </bean>
3. 工作流落地示例
- A业务的“申购”等交易,失败后需要自动回滚。
- A业务的“赎回”等交易,失败后需要转OMS人工重试,确保成功。
- A业务的交易出现异常时,进行调单查询确定工作流当前节点是否调用成功。
- A业务的部分交易超时后会自动关单,关单后要自动回滚。
- A业务的部分交易在主流程完成后,需要进行“冲销”操作,操作失败后尝试重试一次。
(1)失败后转OMS进行CONTINUE操作:
(2)失败后自动ROLLBACK:
(3)具体举例:A业务的工作流-申购
A业务的工作流-申购的路由XML配置:
“`xml
1. 为什么要使用工作流
- 一笔交易的完成存在明显的多步子交易,存在与多个系统交互的情形。
- 每一步子交易都可能存在失败的可能,失败后需要回滚已完成的部分交易或者需要重试去继续剩余的子交易。
- 工作流的设计为一笔交易的多步处理进行了解耦,每一步都是独立的节点,每一个节点的处理都可以在不同的工作流中复用。
- 工作流的设计可以快速定位多步交易出问题时的位置,定位到有问题的子交易并依据配置自动完成异常处理。
- 工作流的设计可以提供通用的异常处理方案,例如:超时关单、调单查询、交易失败自动回滚等。
2. 工作流的基本设计
- 工作流节点WorkflowNode_1成功进入节点WorkflowNode_2,节点WorkflowNode_2处理成功后进入节点WorkflowNode_3,节点WorkflowNode_3处理成功后工作流结束。
2.工作流节点处理出现异常时进入ExceptionWorkflowNode(异常处理)节点处理,处理完成后工作流结束。 - 工作流节点处理失败时进入FailWorkflowNode(失败处理)节点处理,处理结束后工作流结束。
4.工作流节点如何确定“成功”、“异常”、“失败”后进入哪个节点去完成后续处理呢?这里设计“路由”功能,每一个节点处理出结果(成功、异常、失败等)时,
都会调用“路由”来确定下一个处理节点,直到工作流结束。 - 工作流“路由”依赖于XML配置,依据配置“路由”可以确定各个节点处理结束后应该进入的“下一个节点”。此例中的路由配置如下:
<bean id="workflowRoute" class="me.freetiger.workflow.WorkflowRoute"> <!-- 测试工作流 --> <property name="testWorkflow"> <map> <!-- 节点WorkflowNode_1的路由配置 --> <entry key="WorkflowNode_1:SUCCESS" value="WorkflowNode_2"/> <entry key="WorkflowNode_1:FAIL" value="FailWorkflowNode"/> <entry key="WorkflowNode_1:EXCEPTION" value="ExceptionWorkflowNode"/> <!-- 节点WorkflowNode_2的路由配置 --> <entry key="WorkflowNode_2:SUCCESS" value="WorkflowNode_3"/> <entry key="WorkflowNode_2:FAIL" value="FailWorkflowNode"/> <entry key="WorkflowNode_2:EXCEPTION" value="ExceptionWorkflowNode"/> <!-- 节点WorkflowNode_3的路由配置 --> <entry key="WorkflowNode_3:SUCCESS" value="END"/> <entry key="WorkflowNode_3:FAIL" value="FailWorkflowNode"/> <entry key="WorkflowNode_3:EXCEPTION" value="ExceptionWorkflowNode"/> <!-- 节点ExceptionWorkflowNode的路由配置 --> <entry key="ExceptionWorkflowNode:SUCCESS" value="END"/> <!-- 节点FailWorkflowNode的路由配置 --> <entry key="FailWorkflowNode:SUCCESS" value="END"/> </map> </property> </bean>
3. 工作流落地示例
- A业务的“申购”等交易,失败后需要自动回滚。
- A业务的“赎回”等交易,失败后需要转OMS人工重试,确保成功。
- A业务的交易出现异常时,进行调单查询确定工作流当前节点是否调用成功。
- A业务的部分交易超时后会自动关单,关单后要自动回滚。
- A业务的部分交易在主流程完成后,需要进行“冲销”操作,操作失败后尝试重试一次。
(1)失败后转OMS进行CONTINUE操作:
(2)失败后自动ROLLBACK:
(3)具体举例:A业务的工作流-申购
A业务的工作流-申购的路由XML配置:
“`xml
1. 为什么要使用工作流
- 一笔交易的完成存在明显的多步子交易,存在与多个系统交互的情形。
- 每一步子交易都可能存在失败的可能,失败后需要回滚已完成的部分交易或者需要重试去继续剩余的子交易。
- 工作流的设计为一笔交易的多步处理进行了解耦,每一步都是独立的节点,每一个节点的处理都可以在不同的工作流中复用。
- 工作流的设计可以快速定位多步交易出问题时的位置,定位到有问题的子交易并依据配置自动完成异常处理。
- 工作流的设计可以提供通用的异常处理方案,例如:超时关单、调单查询、交易失败自动回滚等。
2. 工作流的基本设计
- 工作流节点WorkflowNode_1成功进入节点WorkflowNode_2,节点WorkflowNode_2处理成功后进入节点WorkflowNode_3,节点WorkflowNode_3处理成功后工作流结束。
2.工作流节点处理出现异常时进入ExceptionWorkflowNode(异常处理)节点处理,处理完成后工作流结束。 - 工作流节点处理失败时进入FailWorkflowNode(失败处理)节点处理,处理结束后工作流结束。
4.工作流节点如何确定“成功”、“异常”、“失败”后进入哪个节点去完成后续处理呢?这里设计“路由”功能,每一个节点处理出结果(成功、异常、失败等)时,
都会调用“路由”来确定下一个处理节点,直到工作流结束。 - 工作流“路由”依赖于XML配置,依据配置“路由”可以确定各个节点处理结束后应该进入的“下一个节点”。此例中的路由配置如下:
<bean id="workflowRoute" class="me.freetiger.workflow.WorkflowRoute"> <!-- 测试工作流 --> <property name="testWorkflow"> <map> <!-- 节点WorkflowNode_1的路由配置 --> <entry key="WorkflowNode_1:SUCCESS" value="WorkflowNode_2"/> <entry key="WorkflowNode_1:FAIL" value="FailWorkflowNode"/> <entry key="WorkflowNode_1:EXCEPTION" value="ExceptionWorkflowNode"/> <!-- 节点WorkflowNode_2的路由配置 --> <entry key="WorkflowNode_2:SUCCESS" value="WorkflowNode_3"/> <entry key="WorkflowNode_2:FAIL" value="FailWorkflowNode"/> <entry key="WorkflowNode_2:EXCEPTION" value="ExceptionWorkflowNode"/> <!-- 节点WorkflowNode_3的路由配置 --> <entry key="WorkflowNode_3:SUCCESS" value="END"/> <entry key="WorkflowNode_3:FAIL" value="FailWorkflowNode"/> <entry key="WorkflowNode_3:EXCEPTION" value="ExceptionWorkflowNode"/> <!-- 节点ExceptionWorkflowNode的路由配置 --> <entry key="ExceptionWorkflowNode:SUCCESS" value="END"/> <!-- 节点FailWorkflowNode的路由配置 --> <entry key="FailWorkflowNode:SUCCESS" value="END"/> </map> </property> </bean>
3. 工作流落地示例
- A业务的“申购”等交易,失败后需要自动回滚。
- A业务的“赎回”等交易,失败后需要转OMS人工重试,确保成功。
- A业务的交易出现异常时,进行调单查询确定工作流当前节点是否调用成功。
- A业务的部分交易超时后会自动关单,关单后要自动回滚。
- A业务的部分交易在主流程完成后,需要进行“冲销”操作,操作失败后尝试重试一次。
(1)失败后转OMS进行CONTINUE操作:
(2)失败后自动ROLLBACK:
(3)具体举例:A业务的工作流-申购
A业务的工作流-申购的路由XML配置:
“`xml
部分转自互联网,侵权删除联系
最新评论