一、排他網關 Exclusive Gateway
排他網關又叫互斥網關,條件計算為true的順序流會被選擇繼續流程,有且只有一條出口,如果出現多個條件為true,則會默認選擇第一條true來執行,如果沒有條件輸出true,流程走到這一步的時候則會報錯
二、並行網關 Parallel Gateway
它可以將執行分支(fork)為多條路徑,也可以合並(join)執行的多條入口路徑。簡單點說就是,並行網關它可以有多條入口和出口,並且在合並入口處會等待其他分支執行完,然后再執行后面的流程,另外,需要注意的是,並行網關沒有條件的概念,
即便設置了條件,它會自動忽略
三、包容網關 Inclusive Gateway
用內部帶有’圓圈’圖標的網關(菱形)表示。
這個網關比較特殊,它集合了前面兩個網關的特點,一句話來說就是,它既可以像排他網關那樣設置條件,也能像並行網關這樣設置多條分支並行執行,在上圖中,當流程啟動后,如果流程變量paymentReceived == false且shipOrder == true,將會創建兩個任務。如果只有一個流程變量等於true,則只會創建一個任務。如果沒有條件計算為true,會拋出異常,並可通過指定出口順序流
舉個例子:啟動流程的時候傳入下面的參數,執行流程。
HashMap<String, Object> variableMap = new HashMap<String, Object>();
variableMap.put("receivedPayment", true);
variableMap.put("shipOrder", true);
在上面的例子中,只有ship order 一個任務會被創建,當這個任務完成后,第二個包容網關會合並這兩個執行,並且由於只有一條出口順序流,不會再創建並行執行路徑,只會激活Archive Order任務繼續后面的流程。
四、基於事件的網關 Event-based Gateway
這個網關相比其他三個網關,用的相對沒那么多,主要還是根據業務需求吧
該網關在執行出口處,要連接一個捕獲中間事件。當流程執行到該網關時,流程類似處於等待的狀態,此時執行被暫停,並創建一個事件訂閱
需要訂閱什么事件。基於下列約束:
-
一個基於事件的網關,必須有兩條或更多的出口順序流。
-
基於事件的網關,只能連接至
intermediateCatchEvent(捕獲中間事件)
類型的元素(Activiti不支持基於事件的網關后,連接接收任務,Receive Task)。 -
連接至基於事件的網關的
intermediateCatchEvent
,必須只有一個入口順序流。
當然,新手看到了這里可能還是不知道什么是事件網關,它到底有什么用處呢?下面,我用一個例子來解釋一下:
上圖使用了事件網關、定時器事件,信號捕捉事件,當啟動流程后,流程實例訂閱alert信號事件,並創建一個 5分鍾后觸發的定時器。這使得流程引擎等待5分鍾,並等待信號事件。如果信號在5分鍾內觸發,則定時器會被取消,執行沿着信號繼續。如果信號未被觸 發,執行會在定時器到時后繼續,並取消信號訂閱。
一句話概括事件網關,如果你提交了請假申請,此時流程處於等待狀態,當某個事件觸發時,流程走到用戶任務,辦理了你的請假申請,那么等待會被取消,如果超過1天,還是沒有觸發某個事件,那么你的請假單直接跳過你的上級,直接往后面的流程走