在某些情况下,bamboo 并不支持某些情况下的流程配置,因为底层的网关算法所设立的最基本的规则为:
分支网关对应的汇聚网关的入度>该分支网关聚合到该汇聚网关的数量,则认为该分支网关所对应的网关是可以共享给其他网关的。如下图:

在上图中的汇聚网关的入度刚好等于分支网关的分支数,于是该汇聚网关会被认为是属于汇聚网关的,且不能共享。
具体到代码中如下:

此时对于并行网关而言,由于之后的汇聚网关已经被分支网关独占,此时只能向后搜索:

并行网关尝试搜索之后的汇聚网关,在上图中,汇聚网关的后面是结束节点,而并行网关无法直接连接结束节点,于是流程保存报错。
要解决这个流程的问题,我们需要在汇聚网关之后再加一个汇聚网关即可正常保存。

由于分支网关可以连接结束节点,我们也可以这样改:

同样的下图也可以直接保存的原因本质上也是即使汇聚网关不能共享,但是分支网关可以直接连接结束节点的原因。

要解决上述的问题,阅读了代码之后思考了两种可能的解决方案:
方案 一 :
分支网关对应的汇聚网关放开条件,使得汇聚网关的入度>=分支网关的分支数即可标记为改网关是可以共享的。

经过验证,这显然是不行的,在下图这种情况中:

由于分支网关对应的汇聚网关被标记为共享,这意味在并行网关的视角下,红框内的汇聚网关都是可汇聚的。这样就会导致报错,现有的算法是深度搜索整棵树去寻找网关和对应汇聚网关的关系。所以每一轮的搜索中,都无法得知全局信息。所以无法判定并行网关应该正确对应哪个汇聚网关。
我们可以一眼判断出来应该使用下面那个,但是在程序的视角中,是没有整个流程的全局视图的。
所以我们需要找到一种新的算法或者基于现有的得出一种更加优异的解决方式,使得网关可以准确对应到可以汇聚的汇聚网关上。
目前来看难度比较高,对底层的修改侵入式也比较大,且该问题造成的影响范围较小,故先搁置。
方案二:
并行网关可以直接连接结束节点。
结论: 目前引擎的限制并行网关必须连接到汇聚网关,才能保证所有正在进行的进程都执行成功了。
放开该限制对引擎改装比较大,故先搁置。
在某些情况下,bamboo 并不支持某些情况下的流程配置,因为底层的网关算法所设立的最基本的规则为:
分支网关对应的汇聚网关的入度>该分支网关聚合到该汇聚网关的数量,则认为该分支网关所对应的网关是可以共享给其他网关的。如下图:

在上图中的汇聚网关的入度刚好等于分支网关的分支数,于是该汇聚网关会被认为是属于汇聚网关的,且不能共享。
具体到代码中如下:

此时对于并行网关而言,由于之后的汇聚网关已经被分支网关独占,此时只能向后搜索:

并行网关尝试搜索之后的汇聚网关,在上图中,汇聚网关的后面是结束节点,而并行网关无法直接连接结束节点,于是流程保存报错。
要解决这个流程的问题,我们需要在汇聚网关之后再加一个汇聚网关即可正常保存。
由于分支网关可以连接结束节点,我们也可以这样改:

同样的下图也可以直接保存的原因本质上也是即使汇聚网关不能共享,但是分支网关可以直接连接结束节点的原因。

要解决上述的问题,阅读了代码之后思考了两种可能的解决方案:
方案 一 :
分支网关对应的汇聚网关放开条件,使得汇聚网关的入度>=分支网关的分支数即可标记为改网关是可以共享的。
经过验证,这显然是不行的,在下图这种情况中:
由于分支网关对应的汇聚网关被标记为共享,这意味在并行网关的视角下,红框内的汇聚网关都是可汇聚的。这样就会导致报错,现有的算法是深度搜索整棵树去寻找网关和对应汇聚网关的关系。所以每一轮的搜索中,都无法得知全局信息。所以无法判定并行网关应该正确对应哪个汇聚网关。
我们可以一眼判断出来应该使用下面那个,但是在程序的视角中,是没有整个流程的全局视图的。
所以我们需要找到一种新的算法或者基于现有的得出一种更加优异的解决方式,使得网关可以准确对应到可以汇聚的汇聚网关上。
目前来看难度比较高,对底层的修改侵入式也比较大,且该问题造成的影响范围较小,故先搁置。
方案二:
并行网关可以直接连接结束节点。
结论: 目前引擎的限制并行网关必须连接到汇聚网关,才能保证所有正在进行的进程都执行成功了。
放开该限制对引擎改装比较大,故先搁置。