前提
流程中的網關用於控制順序流的分支和匯合,如果不需要進行順序流的控制,則可以不使用網關。
一:互斥網關(單行網關)
1、互斥網關就好像一個人走到了一個岔路口,只能選擇一條路前進,至於選擇哪條路由順序流的條件決定;也就是從互斥網關輸出的順序流1和順序流2都被設置的有條件;
(1)、如果只有一個順序流的條件滿足要求,則就走這個順序流;
(2)、如果有多個順序流的條件滿足要求,則哪個順序流的定義在流程文件中靠前,走哪個順序流;
(3)、如果沒有順序流的條件滿足要求,則拋出異常。
二:並行網關
1、並行網關對執行流會有兩種行為:分岔和合並;
(1)、分岔(上圖中的第一個並行網關):可以讓一個執行流變為多個同時進行的並發執行流;從並行網關輸出的順序流1和順序流2中不用設置條件,就算設置條件,並行網關也會忽略,因為他們不使用條件進行判斷。
(2)、合並(上圖中的第二個並行網關):可以讓多個執行流合並為一個執行流;
2、並行網關並不要求成對出現,即有了分岔並不一定有合並,有了合並也不一定有分岔;
3、一個並行網關允許同時出現分岔和合並兩種行為,即多個執行流到達該並行網關時被合並,然后隨機又被分岔為多個執行流。
三:兼容網關
1、兼容網關就好像是互斥網關和並行網關的結合體,即可以當互斥網關使用,也可以當並行網關使用;
2、當互斥網關使用時,需要為從兼容網關輸出的順序流1和順序流2設置條件:
(1)、如果只有一個順序流的條件滿足要求,則就走這個順序流;
(2)、如果有多個順序流的條件滿足要求,則會並行走滿足條件的所有順序流;(這點和互斥網關有區別,互斥網關是哪個順序流的定義在流程文件中靠前,走哪個順序流);
(3)、如果沒有順序流的條件滿足要求,則拋出異常。
3、當並行網關使用時,不能為從兼容網關輸出的順序流1和順序流2設置條件;這樣以來它就和並行網關的特性一模一樣,既有分岔行為也有合並行為,且處理方式也和並行網關一致。
四:事件網關
1、事件網關是根據它所連接的中間Catching事件來決定流程的走向;
2、上圖中事件網關直接連接了順序流1和順序流2,順序流1直接連接了信號事件,順序流2直接連接了定時器事件;
3、有些同學會有以下疑惑:當流程走到事件網關時,並不知道是往順序流1走?還是往順序流2走?因為只有走了順序流1或者順序流2后才能到達各自連接的事件,然后才能根據事件進行判斷;這樣以來就出現了走向選擇的問題。
4、實際上當流程走到事件網關時,並不會立馬選擇走順序流1還是走順序流2,而是Activiti會為全部的中間Catching事件創建相應的數據,當某個中間事件先被觸發了,流程就會選擇觸發事件所在的順序流走下去。