Activiti-停止所有并行流的网关吗?

Ser*_*ici 5 java bpmn activiti

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

BPMN有一个表示法Parallel Gateway,它使我们能够创建“并行”执行的任务流。但是,是否有一种机制(网关)启动并行流,但是一旦并行流之一完成,该机制就会杀死其他流?

例如:

StartEvent -> ParallelGateway (fork) -> {FlowA, FlowB, FlowC} -> ParallelGateway (join) -> EndEvent
Run Code Online (Sandbox Code Playgroud)

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

有什么想法要实现吗?

编辑

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

Mar*_*mak 2

您可能想尝试在嵌入式事务子流程中使用取消结束事件。不过,我个人从未使用过该功能。看:

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

我的想法是这样的:

外部 StartEvent -> 事务性子流程边界 -> 内部 StartEvent -> ParallelGateway (fork) -> {FlowA, FlowB, FlowC} -> XorGateway (join) -> 内部取消 EndEvent -> 附加了边界取消事件的事务性子流程边界 -> 外部EndEvent(带有来自取消边界事件的序列流)

XOR 连接将导致第一个令牌到达取消结束事件,从而取消整个交易。显然,这实际上有点“误用”“取消”的结构,因为这里的流程总是会取消交易,而不仅仅是作为“规则的例外”。

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