本發(fā)明涉及一種基于分布式部署的跨系統(tǒng)流程引擎協(xié)作系統(tǒng)及方法,屬于中間件技術領域,尤其是在業(yè)務流程管理領域。
背景技術:
流程引擎的本質(zhì)是狀態(tài)變遷和過程流轉(zhuǎn),目前市場上的流程引擎大部分基于Petri Net或有限狀態(tài)機(Finite State Machine-FSM)模型實現(xiàn)?;赑etri Net或FSM模型,利用token樹驅(qū)動流程狀態(tài)的變遷,進而實現(xiàn)串行流程、并行流程、子流程等常見的業(yè)務流程,在OA、ERP等軟件系統(tǒng)中普遍應用。但是,在組織架構復雜、跨地域協(xié)作工作的集團型大企業(yè)里,傳統(tǒng)的流程引擎不能支持跨組織、跨地域、分布式部署環(huán)境下的流程自動協(xié)作,往往需要人工參與進行數(shù)據(jù)合并和驅(qū)動流轉(zhuǎn),既給系統(tǒng)運維增加難度,也影響了系統(tǒng)的實時性。
技術實現(xiàn)要素:
本發(fā)明技術解決問題:為了解決現(xiàn)有的流程引擎在分布式、多系統(tǒng)環(huán)境下不能自動協(xié)作運行的問題,提供一種基于分布式部署的跨系統(tǒng)流程引擎協(xié)作系統(tǒng)及方法,可以實現(xiàn)在流程實例在分布式、多系統(tǒng)環(huán)境下的自動識別和整合協(xié)作,減少人工參與,降低運維成本,滿足流程運行的實時性。
本發(fā)明技術方案是:一種基于分布式部署的跨系統(tǒng)流程引擎協(xié)作系統(tǒng),所述協(xié)作系統(tǒng)中具有多個應用系統(tǒng),每個應用系統(tǒng)中分別部署有流程引擎內(nèi)核及擴展模塊:在需要跨系統(tǒng)調(diào)用外協(xié)流程的位置部署節(jié)點擴展及流程路由模塊,該節(jié)點擴展及流程路由模塊中配置了外協(xié)流程模板的注冊信息,其中
流程注冊中心模塊:負責管理協(xié)作系統(tǒng)中所有已存在流程模板的地址,供流程引擎內(nèi)核及擴展模塊通過流程注冊查找接口進行調(diào)用,即,流程注冊中心模塊使得協(xié)作系統(tǒng)中所有的流程模板能夠有序地被流程引擎內(nèi)核及擴展模塊以路由的形式調(diào)用;當協(xié)作系統(tǒng)中的服務器啟動時,所有流程模板分別將各自所在服務器地址以編號的形式注冊在流程注冊中心模塊,形成一個流程模板列表;當應用系統(tǒng)A中的流程引擎內(nèi)核及擴展模塊發(fā)起一個流程實例,并執(zhí)行到節(jié)點擴展及流程路由模塊的外協(xié)節(jié)點時,根據(jù)外協(xié)節(jié)點中配置的外協(xié)流程模板編號并通過流程注冊查找接口調(diào)用流程注冊中心模塊,得到外協(xié)流程模板所在服務器地址,進而發(fā)起RESTful請求并執(zhí)行跨系統(tǒng)調(diào)用動作,驅(qū)動應用系統(tǒng)B中流程引擎內(nèi)核及擴展模塊發(fā)起相應的外協(xié)流程實例并執(zhí)行流轉(zhuǎn);外協(xié)流程實例執(zhí)行完成之后,同樣會根據(jù)外協(xié)流程模板所配置的應用系統(tǒng)A中流程模板編號通過流程注冊查找接口調(diào)用流程注冊中心模塊,得到應用系統(tǒng)A中流程引擎所在服務器地址,進而發(fā)RESTful請求并執(zhí)行返回動作,驅(qū)動應用系統(tǒng)A中流程實例繼續(xù)流轉(zhuǎn);
流程注冊中心模塊可以基于zookeeper技術實現(xiàn),協(xié)作系統(tǒng)中的所有流程模板將其所在服務器地址以編號的形式注冊在zookeeper集群的流程注冊中心,使得協(xié)作系統(tǒng)中所有的流程能夠被外部流程引擎以路由的形式有序的調(diào)用。其中,zookeeper集群中流程注冊列表的注冊方式為:在根節(jié)點下,按應用系統(tǒng)標識和訪問地址創(chuàng)建第二層節(jié)點,并將每一個應用系統(tǒng)內(nèi)所有流程模板ID和編號添加在各自節(jié)點下,由于zookeeper自身的特性,協(xié)作系統(tǒng)內(nèi)的所有其他節(jié)點將自動發(fā)現(xiàn)當前節(jié)點下的流程模板列表。流程模板編號是流程模板的唯一標識,又是流程模板所在服務器地址必不可少的組成部分,通過查詢外協(xié)流程編號在zookeeper注冊列表中的位置就可以得到外協(xié)流程所在服務器的地址,所以只需在外協(xié)節(jié)點中配置外協(xié)流程編號,即可實現(xiàn)當前流程對外協(xié)流程的調(diào)用,驅(qū)動外協(xié)流程進行流轉(zhuǎn)。
流程注冊方式為:第一層為根節(jié)點,然后按應用系統(tǒng)標識和訪問地址前綴創(chuàng)建第二層節(jié)點,并將每一個應用系統(tǒng)內(nèi)所有流程模板ID和編號添加在各自節(jié)點下,形成第三層節(jié)點;當某一應用系統(tǒng)出現(xiàn)故障或者斷開時,位于第二層節(jié)點中相應的應用系統(tǒng)節(jié)點及其子節(jié)點也會消失。基于流程注冊中心模塊自身的特性,第二層節(jié)點中所有其他節(jié)點將能夠自動發(fā)現(xiàn)當前節(jié)點下的流程模板列表。
流程引擎內(nèi)核及擴展模塊:負責根據(jù)外協(xié)流程的調(diào)用動作為協(xié)作系統(tǒng)提供流程節(jié)點的流轉(zhuǎn)、待辦的生成、審批意見、操作歷史記錄的功能。當應用系統(tǒng)A中的流程引擎內(nèi)核及擴展模塊執(zhí)行流程實例到外協(xié)節(jié)點并通過zookeeper調(diào)用應用系統(tǒng)B中的外協(xié)流程時,會將當前流程實例的處理意見及待辦信息以參數(shù)的形式發(fā)送給外協(xié)流程,然后將操作記錄記錄到后臺數(shù)據(jù)庫中。調(diào)用動作包括如下:
a)啟動:根據(jù)外協(xié)流程模板編號,啟動一個新的流程;
b)提交:根據(jù)外協(xié)流程模板編號、實例ID和節(jié)點參數(shù),驅(qū)動流程流轉(zhuǎn);
c)拿回:根據(jù)外協(xié)流程模板編號、實例ID和節(jié)點參數(shù),取消上一次的送審;
d)跳轉(zhuǎn):根據(jù)外協(xié)流程模板編號、實例ID和節(jié)點參數(shù),直接跳轉(zhuǎn)至流程中的某一個節(jié)點;
e)結(jié)束:根據(jù)外協(xié)流程模板編號、實例ID直接結(jié)束一個流程。
若當前調(diào)用動作為啟動一個外協(xié)流程,則需要記錄到數(shù)據(jù)庫的內(nèi)容包括:當前流程的啟動動作、當前流程處理人的處理權限、外協(xié)流程實例ID、外協(xié)流程實例的全局屬性、流程跟蹤信息;若當前調(diào)用動作為提交、拿回、跳轉(zhuǎn),結(jié)束中的一種,則需要記錄到數(shù)據(jù)庫的內(nèi)容包括:當前流程的提交動作、當前流程代辦的已處理動作以及為外協(xié)流程中的下一步驟生成新待辦動作、當前流程處理人意見以及外協(xié)流程中的下一步驟的處理人意見。應用系統(tǒng)B中的外協(xié)流程執(zhí)行完成返回應用系統(tǒng)A時,會將外協(xié)流程的處理結(jié)果數(shù)據(jù)以JSON的格式發(fā)送給應用系統(tǒng)A中的流程引擎內(nèi)核及擴展模塊,以驅(qū)動原流程繼續(xù)流轉(zhuǎn)。
節(jié)點擴展及流程路由模塊:節(jié)點擴展是指擴展流程引擎的節(jié)點類型,即外協(xié)節(jié)點,外協(xié)節(jié)點中需要配置外協(xié)流程在zookeeper流程注冊中心中的注冊編號及當前流程的輸出參數(shù),包括處理人、是否同步,若輸出參數(shù)中的是否同步屬性設置為“是”,則應用系統(tǒng)A中的流程引擎執(zhí)行到外協(xié)節(jié)點時,會等待直到外協(xié)流程流轉(zhuǎn)完成,然后繼續(xù)執(zhí)行后續(xù)的流程;若輸出參數(shù)中的是否同步屬性設置為“否”,則應用系統(tǒng)A中的流程引擎執(zhí)行到外協(xié)節(jié)點時,提交調(diào)用動作,直接進行當前流程后續(xù)的流轉(zhuǎn)。流程路由是指流程引擎的RESTful請求地址,通過在流程注冊中心中查找外協(xié)節(jié)點中配置的外協(xié)模板編號和其所在服務器地址前綴來獲得,且支持外部調(diào)用。所述RESTful請求是通過訪問指定URL的形式來實現(xiàn)的,根據(jù)流程引擎內(nèi)核及擴展模塊發(fā)起的調(diào)用動作的不同,URL的組合形式分為兩種,若調(diào)用動作為啟動一個外協(xié)流程,則其中URL形式為:服務器地址前綴+所述的調(diào)用動作+流程模板ID,且外協(xié)流程啟動后會將外協(xié)流程實例ID發(fā)送給原流程引擎;若調(diào)用動作為提交、拿回、跳轉(zhuǎn)、結(jié)束一個外協(xié)流程,則URL形式為服務器地址前綴+所述的調(diào)用動作+流程模板ID+流程實例ID。當流程引擎內(nèi)核及擴展模塊執(zhí)行流程實例到節(jié)點擴展及流程路由模塊的外協(xié)節(jié)點時,會根據(jù)外協(xié)節(jié)點的配置信息獲取外協(xié)流程模板的路由,進而發(fā)起RESTful請求并調(diào)用外協(xié)流程。同理,外協(xié)流程流轉(zhuǎn)結(jié)束之后也通過自身的外協(xié)節(jié)點返回到原流程實例的外協(xié)節(jié)點處,驅(qū)動原流程實例繼續(xù)流轉(zhuǎn)。
綜合以上三個模塊所述,本發(fā)明的實施過程為:在需要流程調(diào)用的位置設置外協(xié)節(jié)點,流程引擎執(zhí)行至外協(xié)節(jié)點時,根據(jù)zookeeper中的流程注冊列表,查找外協(xié)節(jié)點配置的外協(xié)流程模板編號,進而獲取外協(xié)流程的服務器地址,再根據(jù)服務器地址調(diào)用RESTful服務驅(qū)動外協(xié)流程流轉(zhuǎn);當外協(xié)流程調(diào)用結(jié)束后,也根據(jù)注冊列表及原流程引擎所在的服務器地址返回到外協(xié)節(jié)點,驅(qū)動當前流程繼續(xù)流轉(zhuǎn)。
本發(fā)明與現(xiàn)有技術相比的有益效果是
(1)由于本發(fā)明中的流程注冊中心為分布式系統(tǒng)中的所有流程注冊地址,使得流程引擎間的相互調(diào)用更具秩序化,特別是針對組織架構復雜、跨地域協(xié)作的集團型企業(yè),極大地提高了流程調(diào)用的可靠性。
(2)本發(fā)明擴展了流程引擎內(nèi)核,將流程內(nèi)的執(zhí)行動作通過外協(xié)節(jié)點擴展到流程之間,提高了分布式系統(tǒng)中流程引擎的可用性,及擴展性。
(3)本發(fā)明中分布式系統(tǒng)中流程引擎相互調(diào)用的過程是通過設置外協(xié)節(jié)點及RESTful請求來實現(xiàn)的,調(diào)用動作通過外協(xié)節(jié)點自動完成,大大簡化了系統(tǒng)間流程調(diào)用的人工操作,避免出現(xiàn)數(shù)據(jù)丟失或不一致等問題,而RESTful請求方式又使得被調(diào)用流程得資源暴露出來更具透明性,不需要考慮上下文及當前狀態(tài),極大的降低了路由的復雜度,進一步提高了執(zhí)行效率。
附圖說明
圖1是本發(fā)明的邏輯部署結(jié)構圖;
圖2是流程注冊中心的流程注冊方式圖;
圖3為流程引擎內(nèi)核的擴展圖;
圖4為外協(xié)節(jié)點的設置方式圖;
圖5為流程調(diào)用的路由方式圖。
具體實施方式
下面結(jié)合附圖和實例對本發(fā)明進一步詳細說明。
如圖1所示,本發(fā)明主要包括流程注冊中心模塊、流程引擎內(nèi)核及擴展模塊、節(jié)點擴展及流程路由模塊。流程注冊中心模塊將協(xié)作系統(tǒng)內(nèi)的所有流程進行注冊,為節(jié)點擴展及流程路由模塊進行路徑規(guī)劃提供基礎,節(jié)點擴展及路由模塊為分布式系統(tǒng)中流程引擎相互調(diào)用提供路徑支持,流程引擎內(nèi)核及擴展模塊依靠前兩個模塊實現(xiàn)流程引擎間相互調(diào)用的動作及內(nèi)容。
整個實現(xiàn)過程可歸述為:當協(xié)作系統(tǒng)中的服務器啟動時,所有流程模板分別將各自所在服務器地址以編號的形式注冊在流程注冊中心模塊,形成一個流程模板列表。當應用系統(tǒng)A中的流程引擎內(nèi)核及擴展模塊發(fā)起一個流程實例,并執(zhí)行到節(jié)點擴展及流程路由模塊的外協(xié)節(jié)點時,根據(jù)外協(xié)節(jié)點中配置的外協(xié)流程模板編號并通過流程注冊查找接口調(diào)用流程注冊中心模塊,得到外協(xié)流程模板所在服務器地址,進而發(fā)起RESTful請求并執(zhí)行跨系統(tǒng)調(diào)用動作,驅(qū)動應用系統(tǒng)B中流程引擎內(nèi)核及擴展模塊發(fā)起相應的外協(xié)流程實例并執(zhí)行流轉(zhuǎn)。外協(xié)流程實例執(zhí)行完成之后,同樣會根據(jù)外協(xié)流程模板所配置的應用系統(tǒng)A中流程模板編號通過流程注冊查找接口調(diào)用流程注冊中心模塊,得到應用系統(tǒng)A中流程引擎所在服務器地址,進而發(fā)RESTful請求并執(zhí)行返回動作,同時會將外協(xié)流程的處理結(jié)果數(shù)據(jù)以JSON的格式發(fā)送給應用系統(tǒng)A中的流程引擎內(nèi)核及擴展模塊,以驅(qū)動應用系統(tǒng)A中流程實例繼續(xù)流轉(zhuǎn)。
如圖2所示,本發(fā)明中流程注冊中心模塊具體實現(xiàn)如下:
協(xié)作系統(tǒng)內(nèi)的所有流程模板根據(jù)編號將其所在服務器地址以列表的形式注冊在流程注冊中心模塊,當應用系統(tǒng)A中的流程引擎內(nèi)核及擴展模塊發(fā)起一個流程實例,并執(zhí)行到節(jié)點擴展及流程路由模塊的外協(xié)節(jié)點時,根據(jù)外協(xié)節(jié)點中配置的外協(xié)流程模板編號并通過流程注冊查找接口調(diào)用流程注冊中心模塊,查詢流程模板列表,得到外協(xié)流程模板所在服務器地址,進而發(fā)起RESTful請求并執(zhí)行跨系統(tǒng)調(diào)用動作,驅(qū)動應用系統(tǒng)B中流程引擎內(nèi)核及擴展模塊發(fā)起相應的外協(xié)流程實例并執(zhí)行流轉(zhuǎn);外協(xié)流程實例執(zhí)行完成之后,同樣會根據(jù)外協(xié)流程模板所配置的應用系統(tǒng)A中流程模板編號通過流程注冊查找接口查詢zookeeper中的流程列表,得到應用系統(tǒng)A中流程引擎所在服務器地址,進而發(fā)RESTful請求并執(zhí)行返回動作,驅(qū)動應用系統(tǒng)A中流程實例繼續(xù)流轉(zhuǎn)。流程注冊中心模塊基于zookeeper技術實現(xiàn),當協(xié)作系統(tǒng)中的服務器啟動時,所有流程模板將其所在服務器地址以編號的形式注冊在zookeeper集群的流程注冊中心,形成流程模板列表,使得協(xié)作系統(tǒng)中的流程能夠被外部流程引擎以路由的形式有序的調(diào)用。zookeeper集群中流程模板列表的注冊方式為:在zookeeper的根節(jié)點下,按應用系統(tǒng)標識和訪問地址前綴創(chuàng)建第二層節(jié)點,并將每一個應用系統(tǒng)內(nèi)所有流程模板ID和編號添加在各自節(jié)點下,形成第三層節(jié)點。當某一應用系統(tǒng)出現(xiàn)故障或者斷開時,位于第二層節(jié)點中相應的應用系統(tǒng)節(jié)點及其子節(jié)點也會消失。由于zookeeper自身的特性,協(xié)作系統(tǒng)內(nèi)的所有其他節(jié)點將自動發(fā)現(xiàn)當前節(jié)點下的流程模板列表。流程模板編號是流程模板的唯一標識,又是流程模板所在服務器地址必不可少的組成部分,通過查詢外協(xié)流程編號在zookeeper的流程模板列表位置就可以得到外協(xié)流程所在服務器的地址,所以只需在外協(xié)節(jié)點中配置外協(xié)流程編號,即可實現(xiàn)當前流程對外協(xié)流程的調(diào)用,驅(qū)動外協(xié)流程進行流轉(zhuǎn)。外協(xié)流程執(zhí)行完成之后,同樣會通過原流程的模板編號和流程注冊查找接口來查詢zookeeper中的流程模板列表,得到原流程的服務器地址,進而返回到原流程的外協(xié)節(jié)點,驅(qū)動其繼續(xù)流轉(zhuǎn)。
如圖3所示,本發(fā)明中流程引擎內(nèi)核及擴展模塊具體實現(xiàn)如下:
當應用系統(tǒng)A中的流程引擎內(nèi)核及擴展模塊執(zhí)行流程實例到外協(xié)節(jié)點并通過流程注冊中心模塊調(diào)用應用系統(tǒng)B中的外協(xié)流程時,會將當前流程實例的處理意見及待辦信息以參數(shù)的形式發(fā)送給外協(xié)流程,然后將操作記錄記錄到后臺數(shù)據(jù)庫中。調(diào)用動作包括如下:
a)啟動:根據(jù)外協(xié)流程模板編號,啟動一個新的流程;
b)提交:根據(jù)外協(xié)流程模板編號、實例ID和節(jié)點參數(shù),驅(qū)動流程流轉(zhuǎn);
c)拿回:根據(jù)外協(xié)流程模板編號、實例ID和節(jié)點參數(shù),取消上一次的送審;
d)跳轉(zhuǎn):根據(jù)外協(xié)流程模板編號、實例ID和節(jié)點參數(shù),直接跳轉(zhuǎn)至流程中的某一個節(jié)點;
e)結(jié)束:根據(jù)外協(xié)流程模板編號、實例ID直接結(jié)束一個流程。
若當前調(diào)用動作為啟動一個外協(xié)流程,則需要記錄到數(shù)據(jù)庫的內(nèi)容包括:當前流程的啟動動作、當前流程處理人的處理權限、外協(xié)流程實例ID、外協(xié)流程實例的全局屬性、流程跟蹤信息;若當前調(diào)用動作為提交、拿回、跳轉(zhuǎn),結(jié)束中的一種,則需要記錄到數(shù)據(jù)庫的內(nèi)容包括:當前流程的提交動作、當前流程代辦的已處理動作以及為外協(xié)流程中的下一步驟生成新待辦動作、當前流程處理人意見以及外協(xié)流程中的下一步驟的處理人意見。應用系統(tǒng)B中的外協(xié)流程執(zhí)行完成返回應用系統(tǒng)A時,會將外協(xié)流程的處理結(jié)果數(shù)據(jù)以JSON的格式發(fā)送給應用系統(tǒng)A中的流程引擎內(nèi)核及擴展模塊,以驅(qū)動原流程繼續(xù)流轉(zhuǎn)。
如圖4和圖5所示,本發(fā)明中節(jié)點擴展及流程路由模塊具體實現(xiàn)如下:
節(jié)點擴展是指擴展流程引擎的節(jié)點類型,即外協(xié)節(jié)點,外協(xié)節(jié)點中需要配置外協(xié)流程在流程注冊中心模塊中的注冊編號及當前流程的輸出參數(shù),包括處理人、是否同步,若輸出參數(shù)中的是否同步屬性設置為“是”,則應用系統(tǒng)A中的流程引擎執(zhí)行到外協(xié)節(jié)點時,會等待直到外協(xié)流程流轉(zhuǎn)完成,然后繼續(xù)執(zhí)行后續(xù)的流程;若輸出參數(shù)中的是否同步屬性設置為“否”,則應用系統(tǒng)A中的流程引擎執(zhí)行到外協(xié)節(jié)點時,提交調(diào)用動作,直接進行當前流程后續(xù)的流轉(zhuǎn)。流程路由是指流程引擎的RESTful請求地址,通過在流程注冊中心模塊中查找外協(xié)節(jié)點中配置的外協(xié)模板編號和其所在服務器地址前綴來獲得,且支持外部調(diào)用。RESTful請求是通過訪問指定URL的形式來實現(xiàn)的,根據(jù)流程引擎內(nèi)核及擴展模塊發(fā)起的調(diào)用動作的不同,URL的組合形式分為兩種,若調(diào)用動作為啟動一個外協(xié)流程,則其中URL形式為:服務器地址前綴+所述的調(diào)用動作+流程模板ID,且外協(xié)流程啟動后會將外協(xié)流程實例ID發(fā)送給原流程引擎;若調(diào)用動作為提交、拿回、跳轉(zhuǎn)、結(jié)束一個外協(xié)流程,則URL形式為服務器地址前綴+所述的調(diào)用動作+流程模板ID+流程實例ID。當流程引擎內(nèi)核及擴展模塊執(zhí)行流程實例到節(jié)點擴展及流程路由模塊的外協(xié)節(jié)點時,會根據(jù)外協(xié)節(jié)點的配置信息獲取外協(xié)流程模板的路由,進而發(fā)起RESTful請求并調(diào)用外協(xié)流程,并提交業(yè)務相關的JSON數(shù)據(jù)。同理,外協(xié)流程流轉(zhuǎn)結(jié)束之后也通過自身的外協(xié)節(jié)點返回到原流程實例的外協(xié)節(jié)點處,驅(qū)動原流程實例繼續(xù)流轉(zhuǎn)。