前言
执行流程推进,但是到了并行网关后,任务莫名的“消失”,不再往后执行, 并行网关第三种常用方式:(我遇见的问题),以及我的解决方案。
并行网关
并行网关允许将流程分成多条分支,也可以把多条分支汇聚到一起,并行网关的功能是基于进入和外出顺序流的。
fork 分支:并行后的所有外出顺序流,为每个顺序流都创建一个并发分支。
join 汇聚:所有到达并行网关,在此等待的进入分支, 直到所有进入顺序流的分支都到达以后, 流程就会通过汇聚网关。
注意:如果同一个并行网关有多个进入和多个外出顺序流, 它就同时具有分支和汇聚功能。 这时,网关会先汇聚所有进入的顺序流,然后再切分成多个并行分支。
并行网关使用:
通常在使用网关的时候都是排他和并行联合起来使用
简单说说排他网关:
排他网关:根据条件往下执行,通常是一对二或者一对多,但是特点就是只能执行命中一条,如果由于条件相同,命中不止一条,那么就会执行流程先定义的那一条,如果没有命中就会抛异常;
并行网关第一种常用方式:
并行网关:通常是成对出现
这种很好理解,零件生产后组装,同时生产,缺一不可
并行网关第二种常用方式:
这种是有分支属性,消息会下发到每一条分支,但是要注意的是:经理审核完以后,流程看似结束,但总监审核的那条分支依然存在,当总监审核完以后才算是真正结束流程
并行网关第三种常用方式:(我遇见的问题)
具有汇聚属性的并行使用
流程乍一看没毛病,但实际上是一个死局,例如上例,合同处理以后,排他网关直流走其中一条,其中一条直接流入并行网关,想让并行网关下发消息,另一条也是有概率流转到并行网关的,也是想让并行网关下发消息,但此并行网关是有两个入口的,根据并行网关的汇聚属性,必须两个入口的数据都到达以后才会执行下一步,但是排他网关限制了只会有一条流出,此并行网关永远都不会继续执行。
解决方案
需要重新画流程
因为业务需求,流程就要这么走,如果不改变逻辑,那我觉得做一个所有人都看不见的系统处理来接收参数往后走,这样并行网关就变成了—个入口,这样就能够保留原有逻辑,同时不影响效率。包容网关也能解决问题,流程跳转也能解决问题。
总结:流程使用前注意他的属性,充分理解后画出的流程才会严谨简洁
引用
遇到相同问题的:
flowable并行网关和排他网关连用bug?_Java-CSDN问答
关于网关的介绍,也有社区博主写的很好