Activiti中的同步節(jié)點(diǎn)和異步節(jié)點(diǎn)

同步節(jié)點(diǎn)和異步節(jié)點(diǎn)

service task和 user task中都會(huì)有一個(gè)Asynchronous的復(fù)選框,這個(gè)Async有什么區(qū)別呢?
參考Synchronous vs. Asynchronous Service Invocations - BPMN Service Task,可以理解為,

  • 同步節(jié)點(diǎn):類似同步調(diào)用,調(diào)用者都是流程引擎,服務(wù)提供方是userTask, serviceTask,同步節(jié)點(diǎn)是流程引擎在執(zhí)行Task時(shí),一直等待Task執(zhí)行完才返回。
  • 異步節(jié)點(diǎn):流程引擎將異步節(jié)點(diǎn)的請求都構(gòu)造出來,放到一個(gè)待執(zhí)行隊(duì)列中,由request Processor執(zhí)行,執(zhí)行完之后將結(jié)果通過回調(diào)的方式返回給流程引擎。

如果某一個(gè)節(jié)點(diǎn),依賴于上一個(gè)節(jié)點(diǎn)的返回結(jié)果,那這個(gè)節(jié)點(diǎn)需要是同步節(jié)點(diǎn),否則可以是異步節(jié)點(diǎn)。

以下是2017.12.27更新


對于serviceTask而言,是否設(shè)置asynchronous并不是看“是否依賴于上個(gè)節(jié)點(diǎn)的返回結(jié)果”(上邊刪除線標(biāo)記的部分),而是要看這個(gè)節(jié)點(diǎn)是否要跟上一個(gè)節(jié)點(diǎn)在同一個(gè)事務(wù)中
事務(wù)(transaction)可以保證在某一個(gè)activity發(fā)生異常后可以回滾。activiti的很多對于DB的操作并不會(huì)直接寫庫,而是在遇到wait status節(jié)點(diǎn)后才submit
那什么才是wait status節(jié)點(diǎn)呢,手冊給出說明,等待狀態(tài)就是讓流程"過一會(huì)之后"再執(zhí)行的節(jié)點(diǎn),遇到這類節(jié)點(diǎn),activiti流程會(huì)把當(dāng)前執(zhí)行結(jié)果持久化,并等待流程被下一次觸發(fā)。(A wait state is a task which is performed "later" which means that Activiti persists the current execution and waits to be triggered again.)。定時(shí)器Timer、異步Task節(jié)點(diǎn)都是“等待狀態(tài)”的節(jié)點(diǎn)。
也就是說,如果你設(shè)置了任務(wù)是“同步”的,則如果發(fā)生異常之后,會(huì)回滾到上一個(gè)處于“等待狀態(tài)”的節(jié)點(diǎn)處。如果設(shè)置了asynchronous,則會(huì)單獨(dú)執(zhí)行和回滾。

參考:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容