我们正在使用Activiti框架来构建将处理特定消息的分离的业务流程。

BPMN的符号为Parallel Gateway,它使我们能够创建“并行”执行的任务流。但是,是否有一种机制(网关)来启动并行流,但是一旦其中一个并行流结束,它将杀死其他机制?

例如:

StartEvent -> ParallelGateway (fork) -> {FlowA, FlowB, FlowC} -> ParallelGateway (join) -> EndEvent

如果FlowB首先完成,则加入网关一定不要等待其他完成,停止它们(这样就不必执行到最后)并继续进行下一个流程(在示例中,这是一个EndEvent) 。

有什么想法要实现吗?

编辑

找到了这个thread,但是不幸的是,该解决方案并没有阻止其他流程。

最佳答案

您可能想要尝试在嵌入式事务子流程中使用cancel end事件。不过,我从来没有亲自使用过该功能。看:

http://www.activiti.org/userguide/#bpmnCancelEndEvent
http://www.activiti.org/userguide/#bpmnBoundaryCancelEvent

我想到的是这样的:

外部StartEvent->事务子流程边界->内部StartEvent-> ParallelGateway(叉)-> {FlowA,FlowB,FlowC}-> XorGateway(联接)->内部取消EndEvent->带有边界取消事件的事务子流程边界->外部EndEvent(序列流来自“取消边界事件”)

XOR连接将使第一个 token 到达取消结束事件,并因此取消整个交易。显然,这实际上是“取消”构造的“误用”,因为在这里流程总是会取消交易,而不仅仅是作为“规则的异常(exception)”。

(从BPMN的角度来看,“终止结束事件”而不是取消结束事件更为合适。这样的结束事件实际上只是终止了将结束事件放入内部的子流程范围。在这种情况下,流程可以继续进行,而无需添加附加了边界取消事件。但是,我不确定Activiti目前是否支持此功能,至少我在文档中找不到它!!)

09-11 17:27