簡體   English   中英

Activiti - 停止所有並行流的網關?

[英]Activiti - A Gateway to stop all parallel flows?

我們正在使用Activiti框架來構建將處理特定消息的分離業務流程。

BPMN有一個表示Parallel Gateway ,它允許我們創建“並行”的任務流。 但是有沒有一個機制(一個網關)來啟動並行流,但只要其中一個並行流完成就會殺死其他流量?

例如:

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

如果FlowB首先完成,則連接網關不能等待其他的完成,停止它們(以便它們不需要執行到最后)並繼續下一個流程(在示例中它是一個EndEvent)。

任何想法如何實現?

編輯

找到這個線程,但不幸的是這個解決方案不會阻止其他流程。

您可能希望嘗試在嵌入式事務子流程中使用取消結束事件。 不過,我從未親自使用過這個功能。 看到:

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

我的想法是這樣的:

Outer StartEvent - > Transactional Subprocess Border - > Inner StartEvent - > ParallelGateway(fork) - > {FlowA,FlowB,FlowC} - > XorGateway(join) - > Inner Canceling EndEvent - >附帶邊界取消事件的事務子流程邊框 - >外部EndEvent(序列流來自取消邊界事件)

XOR連接將導致第一個令牌到達取消結束事件,從而取消整個事務。 顯然,這實際上是對“取消”構造的一種“誤用”,因為這里的流程總是取消交易,而不僅僅是作為“規則的例外”。

(從BPMN的角度來看,“終止結束事件”而不是取消結束事件會更好地適應。這樣的結束事件實際上只是終止了結束事件放在其中的子進程范圍。在這種情況下,流程可以繼續而不是附加邊界取消事件。但是,我不確定Activiti目前是否支持此功能,至少我沒有在文檔中找到它...!)

AFAIK定義並行網關實際上並不模擬並發執行,例如,並發運行的線程。 相反,執行從第一個開始按順序運行,直到達到等待狀態/結束或並行連接。 然后執行引擎按順序開始另一個執行,依此類推。 所以等待似乎是並行執行的固有部分

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM