提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
提示:以下是本篇文章正文内容,下面案例可供参考
一、前置PRE
这个特性,是在THEN表达式内生效。
可以支持如下场景:在所在层级的THEN表达式中所有的节点之前执行
举例说明:
<flow name="myFlow">
<chain id="chainabc">
THEN(nodeA, PRE(nodeB), nodeB, FINALLY(nodeC))
</chain>
</flow>
执行结果示例:
2024-02-23 16:01:05.443|INFO|main|127.0.0.1|4777375b32ac43f9b7585ac7e007c144|1.0|com.yomahub.liteflow.core.FlowExecutor.info[193]|[5453b693cac34eb6a09a0d11c11500c2]:slot[0] offered
2024-02-23 16:01:05.443|INFO|main|127.0.0.1|4777375b32ac43f9b7585ac7e007c144|1.0|com.yomahub.liteflow.flow.element.Node.info[193]|[5453b693cac34eb6a09a0d11c11500c2]:[O]start component[nodeB] execution
NodeB executed
2024-02-23 16:01:05.443|INFO|main|127.0.0.1|4777375b32ac43f9b7585ac7e007c144|1.0|com.finance.micro.api.liteflow.NodeB.info[200]|[5453b693cac34eb6a09a0d11c11500c2]:component[nodeB] finished in 1 milliseconds
2024-02-23 16:01:05.443|INFO|main|127.0.0.1|4777375b32ac43f9b7585ac7e007c144|1.0|com.yomahub.liteflow.flow.element.Node.info[193]|[5453b693cac34eb6a09a0d11c11500c2]:[O]start component[nodeA] execution
NodeA executed
THEN中PRE的位置不重要,最终都会先执行。
PRE中的节点如果异常了,除了后置节点,其他节点就不会向下执行了
这个特性也非常有用,比如我们要对某些接口加分布式锁,那么就可以定义一个/多个PRE节点
二、后置FINALLY
这个特性,是在THEN表达式内生效。
可以支持如下场景:在所在层级的THEN表达式中所有的节点之后执行,不论过程中是否有节点报错,都会执行
举例说明:
<flow name="myFlow">
<chain id="chainabc">
THEN(nodeA, PRE(nodeB), nodeB, FINALLY(nodeC))
</chain>
</flow>
执行结果示例:
2024-02-23 16:08:11.715|INFO|main|127.0.0.1|4003fae974c44504bfb0eb306f25c086|1.0|com.yomahub.liteflow.core.FlowExecutor.info[193]|[8cfd12fb589a479297e81908f891207b]:slot[0] offered
2024-02-23 16:08:11.715|INFO|main|127.0.0.1|4003fae974c44504bfb0eb306f25c086|1.0|com.yomahub.liteflow.flow.element.Node.info[193]|[8cfd12fb589a479297e81908f891207b]:[O]start component[nodeB] execution
NodeB executed
2024-02-23 16:08:11.723|INFO|main|127.0.0.1|4003fae974c44504bfb0eb306f25c086|1.0|com.finance.micro.api.liteflow.NodeB.info[200]|[8cfd12fb589a479297e81908f891207b]:component[nodeB] finished in 1 milliseconds
2024-02-23 16:08:11.723|ERROR|main|127.0.0.1|4003fae974c44504bfb0eb306f25c086|1.0|com.yomahub.liteflow.flow.element.Node.error[346]|[8cfd12fb589a479297e81908f891207b]:component[nodeB] cause error,error:123
2024-02-23 16:08:11.723|INFO|main|127.0.0.1|4003fae974c44504bfb0eb306f25c086|1.0|com.yomahub.liteflow.flow.element.Node.info[193]|[8cfd12fb589a479297e81908f891207b]:[O]start component[nodeC] execution
NodeC executed
2024-02-23 16:08:11.723|INFO|main|127.0.0.1|4003fae974c44504bfb0eb306f25c086|1.0|com.finance.micro.api.liteflow.NodeC.info[200]|[8cfd12fb589a479297e81908f891207b]:component[nodeC] finished in 0 milliseconds
这个特性在我们日常工作中有哪些场景可以用到呢?
1、加锁之后的释放锁
2、执行结束之后的出入参日志输出
3、输出结果敏感信息混淆处理等等
总结
每天进步一点点!