趙業(yè)海
(柳州五菱汽車工業(yè)有限公司,廣西 柳州545007)
柳州五菱以生產(chǎn)和銷售微型汽車零部件、發(fā)動機和專用車為主要業(yè)務(wù)的汽車及零部件制造企業(yè),是中國汽車工業(yè)30強、中國制造業(yè)企業(yè)500強、全國大型工業(yè)企業(yè)500強和信息化企業(yè)500強之一。
在柳州五菱信息化規(guī)劃模型中,將信息系統(tǒng)描述為包括計劃層、執(zhí)行層和控制層的三層模型,如圖1所示。企業(yè)資源規(guī)劃(ERP系統(tǒng))需要實時的生產(chǎn)信息來輔助做出經(jīng)營決策,但來自現(xiàn)場狀態(tài)的實時信息和生產(chǎn)數(shù)據(jù)不能直接反應(yīng)出決策經(jīng)營者所需的準備數(shù)據(jù),包括計劃執(zhí)行進度、物料庫存、質(zhì)量狀況、設(shè)備狀態(tài)等信息。生產(chǎn)制造執(zhí)行系統(tǒng)作為中間的執(zhí)行層,它的目標就是要實現(xiàn)優(yōu)化運行、優(yōu)化控制及優(yōu)化管理,起承上啟下、運籌調(diào)度的中樞作用,其作為生產(chǎn)過程系統(tǒng)的基礎(chǔ)數(shù)據(jù)處理平臺,具有的功能應(yīng)包括:生產(chǎn)調(diào)度、過程資源配置、物料監(jiān)控、質(zhì)量管理、過程數(shù)據(jù)采集、流程模擬、模型計算及過程優(yōu)化等。因此,需要通過系統(tǒng)集成,收集所有相關(guān)物料、資源的信息及時、準確地反應(yīng)到ERP上層。
圖1 系統(tǒng)業(yè)務(wù)分布層次圖
目前我公司信息系統(tǒng)主要包括PLM、ERP、MES、WMS、QMS、主數(shù)據(jù)管理、數(shù)據(jù)采集和控制等多個信息系統(tǒng),系統(tǒng)間的數(shù)據(jù)準確實時交換是實現(xiàn)智能制造的前提。作為SOA核心技術(shù)的ESB提供了綜合、靈活而且一致的集成方法。隨著企業(yè)智能制造信息系統(tǒng)應(yīng)用的深入,如何做好系統(tǒng)集成成為信息化建設(shè)的關(guān)鍵點。通過對集成以及ESB集成平臺的討論,闡述了構(gòu)建智能制造ESB集成設(shè)計的方法,并形成構(gòu)建ESB平臺的頂層設(shè)計。
企業(yè)服務(wù)總線(簡稱ESB),作為一種耦合的服務(wù)和應(yīng)用之間的集成方式,是當今先進的企業(yè)應(yīng)用整合方案。ESB作為SOA架構(gòu)的信息傳輸龍骨,能夠幫助簡化IT架構(gòu)(減少應(yīng)用整合接口的數(shù)量和復(fù)雜程度),降低運作成本,自動實現(xiàn)系統(tǒng)之間、部門之間甚至廠家之間的應(yīng)用集成,從而降低企業(yè)應(yīng)用集成的難度和成本,提升業(yè)務(wù)靈活性和市場響應(yīng)速度(Time to market),最終提升企業(yè)的競爭優(yōu)勢[1]。
借鑒IBM等大型咨詢公司在汽車行業(yè)實施系統(tǒng)間數(shù)據(jù)集成的經(jīng)驗及解決方案,公司制定基于企業(yè)服務(wù)總線(Enterprise Service Bus,簡稱 ESB)的建設(shè)思路,解決了系統(tǒng)之間復(fù)雜的交互邏輯和復(fù)雜的交互技術(shù),圖2為柳州五菱個應(yīng)用系統(tǒng)數(shù)據(jù)集成規(guī)劃示意圖。
圖2 柳州五菱應(yīng)用系統(tǒng)接口規(guī)劃示意圖
使用任何技術(shù)和產(chǎn)品構(gòu)建的企業(yè)服務(wù)總線都應(yīng)包括下列主要功能包括:
路由器:根據(jù)信息內(nèi)容,在不同的應(yīng)用和服務(wù)之間進行信息的傳輸和路由;
轉(zhuǎn)換器:進行應(yīng)用之間的通信協(xié)議轉(zhuǎn)換;
翻譯機:進行應(yīng)用之間的消息格式轉(zhuǎn)換;
收發(fā)室:處理來自不同渠道的業(yè)務(wù)事件(同步傳輸、異步傳輸、發(fā)布/訂閱等方式)。
柳州五菱在產(chǎn)品選型過程中,試用過多個產(chǎn)品,最終選擇使用開源Mule-ESB產(chǎn)品搭建企業(yè)數(shù)據(jù)總線的多系統(tǒng)集成平臺,確保公司內(nèi)部系統(tǒng)之間的數(shù)據(jù)交互以及公司對外業(yè)務(wù)數(shù)據(jù)交互能夠安全、可靠、及時的完成。
Mule ESB是一個基于Java的輕量級企業(yè)服務(wù)總線平臺,并支持開源的產(chǎn)品,允許開發(fā)人員快速便利地連接多個應(yīng)用,并支持應(yīng)用間的數(shù)據(jù)交換。Mule ESB支持集成現(xiàn)有系統(tǒng)而無論其底層采用何種技術(shù),如 JMS、Web Services、JDBC、HTTP以及其他技術(shù)等。目前我公司使用JSON-RPC的通訊方式相同,JSON格式更加高效。
柳州五菱根據(jù)業(yè)務(wù)系統(tǒng)實施情況,結(jié)合公司整體信息系統(tǒng)集成規(guī)劃,總結(jié)出兩類接口設(shè)計流程,即業(yè)務(wù)數(shù)據(jù)接口系統(tǒng)交互流程和主數(shù)據(jù)接口系統(tǒng)交互圖流程(見圖 3、圖 4)。
1.3.1 業(yè)務(wù)數(shù)據(jù)接口系統(tǒng)交互流程
(1)ESB接收源系統(tǒng)的數(shù)據(jù)后將會保存到ESB數(shù)據(jù)庫(轉(zhuǎn)儲數(shù)據(jù)庫 DumpDB)中,實時返回源系統(tǒng)的狀態(tài)為ESB的數(shù)據(jù)接收狀態(tài),而非目的系統(tǒng)的數(shù)據(jù)處理狀態(tài)。
(2)ESB異步方式將接收到的數(shù)據(jù)包原樣發(fā)送給目的系統(tǒng),目的系統(tǒng)實時返回數(shù)據(jù)處理狀態(tài)。
(3)ESB將目的系統(tǒng)返回的數(shù)據(jù)處理狀態(tài)通過另一接口“處理結(jié)果返回接口”發(fā)送給源系統(tǒng)。
1.3.2 主數(shù)據(jù)接口系統(tǒng)交互圖流程
圖3 業(yè)務(wù)數(shù)據(jù)接口系統(tǒng)交互流程
(1)ESB定時按修改時間索引查詢讀取數(shù)據(jù)倉庫(源系統(tǒng))中主數(shù)據(jù),并發(fā)送維目的系統(tǒng)。
(2)ESB每次僅發(fā)送1條數(shù)據(jù)給目的系統(tǒng)(按更改時間升序),目的系統(tǒng)在處理后返回相應(yīng)的處理結(jié)果。目的系統(tǒng)的處理可以是數(shù)據(jù)校驗等操作。
圖4 主數(shù)據(jù)接口系統(tǒng)交互圖流程
(1)源系統(tǒng)發(fā)送的數(shù)據(jù)為JSON格式的數(shù)據(jù)包,其中包括1個必須字段“PackageID”用于唯一標識數(shù)據(jù)包:
1)ESB僅確保同一個“PackageID”從源系統(tǒng)接收到的數(shù)據(jù)以及發(fā)送至目的系統(tǒng)的數(shù)據(jù)一致性,不對其內(nèi)容作解析;其內(nèi)容由源系統(tǒng)與目的系統(tǒng)協(xié)商確保業(yè)務(wù)的完整性及可用性。
2)源系統(tǒng)確保:相同數(shù)據(jù)其PackageID必須相同。如源系統(tǒng)在數(shù)據(jù)發(fā)送失敗下次重發(fā)時,務(wù)必確保同一數(shù)據(jù)的PackageID相同。
3)原則上,1個數(shù)據(jù)包只包括1條業(yè)務(wù)數(shù)據(jù)。以便源、目的系統(tǒng)的數(shù)據(jù)發(fā)送狀態(tài)、處理結(jié)果的校驗及返回。ESB不作強制要求及相關(guān)校驗。
(2)與源系統(tǒng)關(guān)于數(shù)據(jù)發(fā)布接口約定
現(xiàn)在,“寶貝不哭”已成為全院的自覺行動。無論何時何地,聽見孩子哭聲,醫(yī)生護士都會停下來,看看孩子為什么哭?SPE組不再單槍匹馬,這是馬力最樂意看到的。
1)請求數(shù)據(jù)包格式:源系統(tǒng)主動調(diào)用ESB發(fā)布數(shù)據(jù),以下是HTTP請求示例。
POST[URL]HTTP/1.1 Content-Type:text/xml;charset=utf-8 Content-Length:length{"PackageID":"XXXXXXXXXX",//必需。數(shù)據(jù)包ID,長度在20個字節(jié)以內(nèi),英文+數(shù)字…… //以下為數(shù)據(jù)內(nèi)容}源系統(tǒng)務(wù)必確保"PackageID"作為JSON文本中的首字段,以避免不可預(yù)期的錯誤。
2)響應(yīng)數(shù)據(jù)包格式:ESB在HTTP響應(yīng)中即時返回數(shù)據(jù)接收結(jié)果,以下是HTTP響應(yīng)示例。
HTTP/1.1 200 OK Content-Type:text/xml;charset=utf-8 Content-Length:length{“status”:0,//必須,狀態(tài),0-異常,1-正常,2-重復(fù)數(shù)據(jù)"message":"",//非必須,異常時的錯誤詳細描述"resend":"Y"http://非必須.Y則表示當前數(shù)據(jù)包需要再次發(fā)送,反之應(yīng)為N或""或無此字段}
3)處理失敗重發(fā)Resend機制
A.源系統(tǒng)調(diào)用ESB時,如HTTP調(diào)用成功(HTTPStatus=200),但由于ESB原因無法將數(shù)據(jù)包成功保存的,ESB將在返回信息中設(shè)置Resend=Y。
HTTP/1.1 200 OK Content-Type:text/xml;charset=utf-8 Content-Length:length{"status":0,//必須,狀態(tài),0-異常,1-正常,2-重復(fù)數(shù)據(jù)"message":"",//非必須,異常時的錯誤詳細描述"resend":"Y"http://非必須.Y則表示當前數(shù)據(jù)包需要再次發(fā)送,反之應(yīng)為N或""或無此字段}
B.源系統(tǒng)對于Resend=Y的,當前作業(yè)將跳過此包繼續(xù)發(fā)送下一個包。這一個數(shù)據(jù)包將在Resend時間間隔之后再次重發(fā)失敗的數(shù)據(jù);如Resend多次后仍然失敗則不再發(fā)送此數(shù)據(jù)包。
C.建議調(diào)用方對以下連接參數(shù)設(shè)計為每個接口可配置不同參數(shù):Resend次數(shù)、Resend時間間隔。
D.對于數(shù)據(jù)順序要求極高不允許跳包發(fā)送的,需要在接口設(shè)計時由源系統(tǒng)、目的系統(tǒng)及ESB三方協(xié)商確定。
4)發(fā)送失敗重試Retry機制
B.發(fā)送失敗的數(shù)據(jù)不會被跳過,會在下次作業(yè)觸發(fā)時或Resend時間間隔之后再次發(fā)送直至達到最大失敗重試次數(shù)或直至成功。
C.建議源系統(tǒng)方對以下連接參數(shù)設(shè)計為每個接口可配置不同參數(shù):HTTP連接信息、超時時長,失敗重試次數(shù)、失敗重試間隔。
D.對于業(yè)務(wù)時效性極高不允許發(fā)送過期數(shù)據(jù)的,需要在接口設(shè)計時由源系統(tǒng)、目的系統(tǒng)及ESB三方協(xié)商確定。
5)數(shù)據(jù)重復(fù)性校驗原則
A.源系統(tǒng)發(fā)出的數(shù)據(jù)包中必須包括“PackageID”作為數(shù)據(jù)包唯一性標識。
B.ESB獲取數(shù)據(jù)包ID,將先解析獲取數(shù)據(jù)包的“PackageID”字段,并檢索轉(zhuǎn)儲庫中的歷史數(shù)據(jù)是否曾接收過。如已接收,則該數(shù)據(jù)包拋棄并返回錯誤,具體如下:
HTTP/1.1 200 OK Content-Type:text/xml;charset=utf-8 Content-Length:length{"status":0,//必須,狀態(tài),0-異常,1-正常,2-重復(fù)數(shù)據(jù)"message":"",//非必須,異常時的錯誤詳細描述"resend":"N"http://非必須.Y則表示當前數(shù)據(jù)包需要再次發(fā)送,反之應(yīng)為N或""或無此字段}
(3)與目的系統(tǒng)關(guān)于數(shù)據(jù)訂閱接口約定
1)響應(yīng)數(shù)據(jù)包格式:目的系統(tǒng)在HTTP響應(yīng)中即時數(shù)據(jù)處理結(jié)果,以下是HTTP響應(yīng)示例。
HTTP/1.1 200 OK Content-Type:text/xml;charset=utf-8 Content-Length:length{"PackageID":"XXXXXXXXXX",//必須,當前處理的數(shù)據(jù)包ID"status":1 //必須,狀態(tài),0-異常,1-正常,2-重復(fù)數(shù)據(jù)"message":"",//非必須,異常時的錯誤詳細描述。成功時可為""或無此字段"billid":"",//單據(jù)ID"billno":"",//單據(jù)編號"resend":"Y"http://非必須.Y則表示當前數(shù)據(jù)包需要再次發(fā)送,反之應(yīng)為N或""或無此字段}
2)處理失敗重發(fā)Resend機制
A.ESB調(diào)用目的系統(tǒng)時,如HTTP調(diào)用成功(HTTPStatus=200),但由于目的系統(tǒng)原因無法成功處理且需要ESB再次發(fā)送數(shù)據(jù)的,目的系統(tǒng)將在返回信息中設(shè)置Resend=Y。
HTTP/1.1 200 OK Content-Type:text/xml;charset=utf-8 Content-Length:length{"PackageID":"XXXXXXXXXX",//必須,當前處理的數(shù)據(jù)包ID"status":0,"message":"…",//詳細錯誤信息"billid":"",//單據(jù)ID"billno":"",//單據(jù)編號"resend":"Y"}
B.ESB對于Resend=Y的,當前作業(yè)將跳過此包繼續(xù)發(fā)送下一個包。這一個數(shù)據(jù)包將在Resend時間間隔之后再次重發(fā)失敗的數(shù)據(jù);如Resend多次后仍然失敗則不再發(fā)送此數(shù)據(jù)包。
C.ESB將對以下連接參數(shù)設(shè)計為每個接口可配置不同參數(shù):Resend次數(shù)、Resend時間間隔。
D.對于數(shù)據(jù)順序要求極高不允許跳包發(fā)送的,需要在接口設(shè)計時由源系統(tǒng)、目的系統(tǒng)及ESB三方協(xié)商確定。
3)發(fā)送失敗重試Retry機制
A.如ESB調(diào)用目的系統(tǒng)HTTP調(diào)用失?。℉TTP Status!=200)時,ESB將會再次發(fā)送直至N次失敗后結(jié)束。
B.發(fā)送失敗的數(shù)據(jù)不會被跳過,會在下次作業(yè)觸發(fā)時或Resend時間間隔之后再次發(fā)送直至達到最大失敗重試次數(shù)或直至成功。
C.ESB將對以下連接參數(shù)設(shè)計為每個接口可配置不同參數(shù):HTTP連接信息、超時時長,失敗重試次數(shù)、失敗重試間隔。
D.對于業(yè)務(wù)時效性極高不允許發(fā)送過期數(shù)據(jù)的,需要在接口設(shè)計時由源系統(tǒng)、目的系統(tǒng)及ESB三方協(xié)商確定。
4)數(shù)據(jù)重復(fù)性校驗機制
A.目的系統(tǒng)接收數(shù)據(jù)時需要先校驗該數(shù)據(jù)包PackageID是否曾經(jīng)接收/處理過。如已接收,則該數(shù)據(jù)包拋棄并返回錯誤,具體如下:
HTTP/1.1 200 OK Content-Type:text/xml;charset=utf-8 Content-Length:length{"status":0,"message":"重復(fù)數(shù)據(jù)"http://或其他詳細描述信息"message":"…",//詳細錯誤信息"billid":"",//單據(jù)ID"billno":""http://單據(jù)編號}
(4)與源系統(tǒng)關(guān)于數(shù)據(jù)處理結(jié)果返回接口的約定
ESB從目的系統(tǒng)獲得數(shù)據(jù)處理返回結(jié)果后,將主動調(diào)用源系統(tǒng)發(fā)送數(shù)據(jù)處理結(jié)果。HTTP請求與目的系統(tǒng)返回ESB時一致。
1)響應(yīng)數(shù)據(jù)包格式:源系統(tǒng)在HTTP響應(yīng)中即時接收結(jié)果,以下是HTTP響應(yīng)示例。
HTTP/1.1 200 OK Content-Type:text/xml;charset=utf-8 Content-Length:length{“status”:0,//必須,狀態(tài),0-異常,1-正常"message":"",//非必須,異常時的錯誤詳細描述"resend":"Y"http://非必須.Y則表示當前數(shù)據(jù)包需要再次發(fā)送,反之應(yīng)為N或""或無此字段}
2)ESB將從目的系統(tǒng)獲得的數(shù)據(jù)處理結(jié)果返回給源系統(tǒng)。但以下處理結(jié)果不發(fā)送:
A.失敗重發(fā)的數(shù)據(jù)("resend":"Y")。
B.重復(fù)數(shù)據(jù)("status":2)。
3)處理失敗重發(fā)Resend機制
A.ESB調(diào)用源系統(tǒng)時,如HTTP調(diào)用成功(HTTPStatus=200),但源系統(tǒng)異常無法成功記錄返回狀態(tài)信息的,源系統(tǒng)將在返回信息中設(shè)置Resend=Y。
HTTP/1.1 200 OK Content-Type:text/xml;charset=utf-8 Content-Length:length{"status":0,"message":"…",//詳細錯誤信息,一般為JAVA/SQL拋出錯誤信息"resend":"Y"}
B.ESB對于Resend=Y的,當前作業(yè)將跳過此包繼續(xù)發(fā)送下一個包。這一個數(shù)據(jù)包將在Resend時間間隔之后再次重發(fā)失敗的數(shù)據(jù);如Resend多次后仍然失敗則不再發(fā)送此數(shù)據(jù)包。
C.建議調(diào)用方對以下連接參數(shù)設(shè)計為每個接口可配置不同參數(shù):Resend次數(shù)、Resend時間間隔。
D.對于數(shù)據(jù)順序要求極高不允許跳包發(fā)送的,需要在接口設(shè)計時由源系統(tǒng)、目的系統(tǒng)及ESB三方協(xié)商確定。
4)發(fā)送失敗重試Retry機制
A.如ESB調(diào)用源系統(tǒng) HTTP調(diào)用失?。℉TTPStatus!=200)時,ESB將會嘗試再次發(fā)送直至N次失敗后結(jié)束。
B.發(fā)送失敗的數(shù)據(jù)不會被跳過,會在下次作業(yè)觸發(fā)時或Resend時間間隔之后再次發(fā)送直至達到最大失敗重試次數(shù)或直至成功。
C.ESB將對以下連接參數(shù)設(shè)計為每個接口可配置不同參數(shù):HTTP連接信息、超時時長,失敗重試次數(shù)、失敗重試間隔。
本文針對汽車制造企業(yè)的業(yè)務(wù)特點和信息化集成現(xiàn)狀,提出基于數(shù)據(jù)內(nèi)容路由的企業(yè)服務(wù)總線框架,該框架基于面向服務(wù)的思想、其松散耦合的體系架構(gòu)和可重用的服務(wù)能為企業(yè)節(jié)約信息化管理成本。基于規(guī)則引擎的消息內(nèi)容路由機制,使集成系統(tǒng)在面對同一服務(wù)調(diào)用需要跨越多個應(yīng)用系統(tǒng)時,能更快地對業(yè)務(wù)規(guī)則變化做出及時的響應(yīng)。在此框架基礎(chǔ)上實現(xiàn)了汽車制造企業(yè)數(shù)據(jù)集成平臺中的信息集成服務(wù)模塊,能自動實現(xiàn)企業(yè)數(shù)據(jù)應(yīng)用集成,相比傳統(tǒng)的應(yīng)用集成方式有明顯優(yōu)勢。