趙業海
(柳州五菱汽車工業有限公司,廣西 柳州545007)
柳州五菱以生產和銷售微型汽車零部件、發動機和專用車為主要業務的汽車及零部件制造企業,是中國汽車工業30強、中國制造業企業500強、全國大型工業企業500強和信息化企業500強之一。
在柳州五菱信息化規劃模型中,將信息系統描述為包括計劃層、執行層和控制層的三層模型,如圖1所示。企業資源規劃(ERP系統)需要實時的生產信息來輔助做出經營決策,但來自現場狀態的實時信息和生產數據不能直接反應出決策經營者所需的準備數據,包括計劃執行進度、物料庫存、質量狀況、設備狀態等信息。生產制造執行系統作為中間的執行層,它的目標就是要實現優化運行、優化控制及優化管理,起承上啟下、運籌調度的中樞作用,其作為生產過程系統的基礎數據處理平臺,具有的功能應包括:生產調度、過程資源配置、物料監控、質量管理、過程數據采集、流程模擬、模型計算及過程優化等。因此,需要通過系統集成,收集所有相關物料、資源的信息及時、準確地反應到ERP上層。

圖1 系統業務分布層次圖
目前我公司信息系統主要包括PLM、ERP、MES、WMS、QMS、主數據管理、數據采集和控制等多個信息系統,系統間的數據準確實時交換是實現智能制造的前提。作為SOA核心技術的ESB提供了綜合、靈活而且一致的集成方法。隨著企業智能制造信息系統應用的深入,如何做好系統集成成為信息化建設的關鍵點。通過對集成以及ESB集成平臺的討論,闡述了構建智能制造ESB集成設計的方法,并形成構建ESB平臺的頂層設計。
企業服務總線(簡稱ESB),作為一種耦合的服務和應用之間的集成方式,是當今先進的企業應用整合方案。ESB作為SOA架構的信息傳輸龍骨,能夠幫助簡化IT架構(減少應用整合接口的數量和復雜程度),降低運作成本,自動實現系統之間、部門之間甚至廠家之間的應用集成,從而降低企業應用集成的難度和成本,提升業務靈活性和市場響應速度(Time to market),最終提升企業的競爭優勢[1]。
借鑒IBM等大型咨詢公司在汽車行業實施系統間數據集成的經驗及解決方案,公司制定基于企業服務總線(Enterprise Service Bus,簡稱 ESB)的建設思路,解決了系統之間復雜的交互邏輯和復雜的交互技術,圖2為柳州五菱個應用系統數據集成規劃示意圖。

圖2 柳州五菱應用系統接口規劃示意圖
使用任何技術和產品構建的企業服務總線都應包括下列主要功能包括:
路由器:根據信息內容,在不同的應用和服務之間進行信息的傳輸和路由;
轉換器:進行應用之間的通信協議轉換;
翻譯機:進行應用之間的消息格式轉換;
收發室:處理來自不同渠道的業務事件(同步傳輸、異步傳輸、發布/訂閱等方式)。
柳州五菱在產品選型過程中,試用過多個產品,最終選擇使用開源Mule-ESB產品搭建企業數據總線的多系統集成平臺,確保公司內部系統之間的數據交互以及公司對外業務數據交互能夠安全、可靠、及時的完成。
Mule ESB是一個基于Java的輕量級企業服務總線平臺,并支持開源的產品,允許開發人員快速便利地連接多個應用,并支持應用間的數據交換。Mule ESB支持集成現有系統而無論其底層采用何種技術,如 JMS、Web Services、JDBC、HTTP以及其他技術等。目前我公司使用JSON-RPC的通訊方式相同,JSON格式更加高效。
柳州五菱根據業務系統實施情況,結合公司整體信息系統集成規劃,總結出兩類接口設計流程,即業務數據接口系統交互流程和主數據接口系統交互圖流程(見圖 3、圖 4)。
1.3.1 業務數據接口系統交互流程
(1)ESB接收源系統的數據后將會保存到ESB數據庫(轉儲數據庫 DumpDB)中,實時返回源系統的狀態為ESB的數據接收狀態,而非目的系統的數據處理狀態。
(2)ESB異步方式將接收到的數據包原樣發送給目的系統,目的系統實時返回數據處理狀態。
(3)ESB將目的系統返回的數據處理狀態通過另一接口“處理結果返回接口”發送給源系統。
1.3.2 主數據接口系統交互圖流程

圖3 業務數據接口系統交互流程
(1)ESB定時按修改時間索引查詢讀取數據倉庫(源系統)中主數據,并發送維目的系統。
(2)ESB每次僅發送1條數據給目的系統(按更改時間升序),目的系統在處理后返回相應的處理結果。目的系統的處理可以是數據校驗等操作。

圖4 主數據接口系統交互圖流程
(1)源系統發送的數據為JSON格式的數據包,其中包括1個必須字段“PackageID”用于唯一標識數據包:
1)ESB僅確保同一個“PackageID”從源系統接收到的數據以及發送至目的系統的數據一致性,不對其內容作解析;其內容由源系統與目的系統協商確保業務的完整性及可用性。
2)源系統確保:相同數據其PackageID必須相同。如源系統在數據發送失敗下次重發時,務必確保同一數據的PackageID相同。
3)原則上,1個數據包只包括1條業務數據。以便源、目的系統的數據發送狀態、處理結果的校驗及返回。ESB不作強制要求及相關校驗。
(2)與源系統關于數據發布接口約定
現在,“寶貝不哭”已成為全院的自覺行動。無論何時何地,聽見孩子哭聲,醫生護士都會停下來,看看孩子為什么哭?SPE組不再單槍匹馬,這是馬力最樂意看到的。
1)請求數據包格式:源系統主動調用ESB發布數據,以下是HTTP請求示例。

POST[URL]HTTP/1.1 Content-Type:text/xml;charset=utf-8 Content-Length:length{"PackageID":"XXXXXXXXXX",//必需。數據包ID,長度在20個字節以內,英文+數字…… //以下為數據內容}源系統務必確保"PackageID"作為JSON文本中的首字段,以避免不可預期的錯誤。
2)響應數據包格式:ESB在HTTP響應中即時返回數據接收結果,以下是HTTP響應示例。

HTTP/1.1 200 OK Content-Type:text/xml;charset=utf-8 Content-Length:length{“status”:0,//必須,狀態,0-異常,1-正常,2-重復數據"message":"",//非必須,異常時的錯誤詳細描述"resend":"Y"http://非必須.Y則表示當前數據包需要再次發送,反之應為N或""或無此字段}
3)處理失敗重發Resend機制
A.源系統調用ESB時,如HTTP調用成功(HTTPStatus=200),但由于ESB原因無法將數據包成功保存的,ESB將在返回信息中設置Resend=Y。

HTTP/1.1 200 OK Content-Type:text/xml;charset=utf-8 Content-Length:length{"status":0,//必須,狀態,0-異常,1-正常,2-重復數據"message":"",//非必須,異常時的錯誤詳細描述"resend":"Y"http://非必須.Y則表示當前數據包需要再次發送,反之應為N或""或無此字段}
B.源系統對于Resend=Y的,當前作業將跳過此包繼續發送下一個包。這一個數據包將在Resend時間間隔之后再次重發失敗的數據;如Resend多次后仍然失敗則不再發送此數據包。
C.建議調用方對以下連接參數設計為每個接口可配置不同參數:Resend次數、Resend時間間隔。
D.對于數據順序要求極高不允許跳包發送的,需要在接口設計時由源系統、目的系統及ESB三方協商確定。
4)發送失敗重試Retry機制
B.發送失敗的數據不會被跳過,會在下次作業觸發時或Resend時間間隔之后再次發送直至達到最大失敗重試次數或直至成功。
C.建議源系統方對以下連接參數設計為每個接口可配置不同參數:HTTP連接信息、超時時長,失敗重試次數、失敗重試間隔。
D.對于業務時效性極高不允許發送過期數據的,需要在接口設計時由源系統、目的系統及ESB三方協商確定。
5)數據重復性校驗原則
A.源系統發出的數據包中必須包括“PackageID”作為數據包唯一性標識。
B.ESB獲取數據包ID,將先解析獲取數據包的“PackageID”字段,并檢索轉儲庫中的歷史數據是否曾接收過。如已接收,則該數據包拋棄并返回錯誤,具體如下:

HTTP/1.1 200 OK Content-Type:text/xml;charset=utf-8 Content-Length:length{"status":0,//必須,狀態,0-異常,1-正常,2-重復數據"message":"",//非必須,異常時的錯誤詳細描述"resend":"N"http://非必須.Y則表示當前數據包需要再次發送,反之應為N或""或無此字段}
(3)與目的系統關于數據訂閱接口約定
1)響應數據包格式:目的系統在HTTP響應中即時數據處理結果,以下是HTTP響應示例。

HTTP/1.1 200 OK Content-Type:text/xml;charset=utf-8 Content-Length:length{"PackageID":"XXXXXXXXXX",//必須,當前處理的數據包ID"status":1 //必須,狀態,0-異常,1-正常,2-重復數據"message":"",//非必須,異常時的錯誤詳細描述。成功時可為""或無此字段"billid":"",//單據ID"billno":"",//單據編號"resend":"Y"http://非必須.Y則表示當前數據包需要再次發送,反之應為N或""或無此字段}
2)處理失敗重發Resend機制
A.ESB調用目的系統時,如HTTP調用成功(HTTPStatus=200),但由于目的系統原因無法成功處理且需要ESB再次發送數據的,目的系統將在返回信息中設置Resend=Y。

HTTP/1.1 200 OK Content-Type:text/xml;charset=utf-8 Content-Length:length{"PackageID":"XXXXXXXXXX",//必須,當前處理的數據包ID"status":0,"message":"…",//詳細錯誤信息"billid":"",//單據ID"billno":"",//單據編號"resend":"Y"}
B.ESB對于Resend=Y的,當前作業將跳過此包繼續發送下一個包。這一個數據包將在Resend時間間隔之后再次重發失敗的數據;如Resend多次后仍然失敗則不再發送此數據包。
C.ESB將對以下連接參數設計為每個接口可配置不同參數:Resend次數、Resend時間間隔。
D.對于數據順序要求極高不允許跳包發送的,需要在接口設計時由源系統、目的系統及ESB三方協商確定。
3)發送失敗重試Retry機制
A.如ESB調用目的系統HTTP調用失?。℉TTP Status!=200)時,ESB將會再次發送直至N次失敗后結束。
B.發送失敗的數據不會被跳過,會在下次作業觸發時或Resend時間間隔之后再次發送直至達到最大失敗重試次數或直至成功。
C.ESB將對以下連接參數設計為每個接口可配置不同參數:HTTP連接信息、超時時長,失敗重試次數、失敗重試間隔。
D.對于業務時效性極高不允許發送過期數據的,需要在接口設計時由源系統、目的系統及ESB三方協商確定。
4)數據重復性校驗機制
A.目的系統接收數據時需要先校驗該數據包PackageID是否曾經接收/處理過。如已接收,則該數據包拋棄并返回錯誤,具體如下:

HTTP/1.1 200 OK Content-Type:text/xml;charset=utf-8 Content-Length:length{"status":0,"message":"重復數據"http://或其他詳細描述信息"message":"…",//詳細錯誤信息"billid":"",//單據ID"billno":""http://單據編號}
(4)與源系統關于數據處理結果返回接口的約定
ESB從目的系統獲得數據處理返回結果后,將主動調用源系統發送數據處理結果。HTTP請求與目的系統返回ESB時一致。
1)響應數據包格式:源系統在HTTP響應中即時接收結果,以下是HTTP響應示例。

HTTP/1.1 200 OK Content-Type:text/xml;charset=utf-8 Content-Length:length{“status”:0,//必須,狀態,0-異常,1-正常"message":"",//非必須,異常時的錯誤詳細描述"resend":"Y"http://非必須.Y則表示當前數據包需要再次發送,反之應為N或""或無此字段}
2)ESB將從目的系統獲得的數據處理結果返回給源系統。但以下處理結果不發送:
A.失敗重發的數據("resend":"Y")。
B.重復數據("status":2)。
3)處理失敗重發Resend機制
A.ESB調用源系統時,如HTTP調用成功(HTTPStatus=200),但源系統異常無法成功記錄返回狀態信息的,源系統將在返回信息中設置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的,當前作業將跳過此包繼續發送下一個包。這一個數據包將在Resend時間間隔之后再次重發失敗的數據;如Resend多次后仍然失敗則不再發送此數據包。
C.建議調用方對以下連接參數設計為每個接口可配置不同參數:Resend次數、Resend時間間隔。
D.對于數據順序要求極高不允許跳包發送的,需要在接口設計時由源系統、目的系統及ESB三方協商確定。
4)發送失敗重試Retry機制
A.如ESB調用源系統 HTTP調用失?。℉TTPStatus!=200)時,ESB將會嘗試再次發送直至N次失敗后結束。
B.發送失敗的數據不會被跳過,會在下次作業觸發時或Resend時間間隔之后再次發送直至達到最大失敗重試次數或直至成功。
C.ESB將對以下連接參數設計為每個接口可配置不同參數:HTTP連接信息、超時時長,失敗重試次數、失敗重試間隔。
本文針對汽車制造企業的業務特點和信息化集成現狀,提出基于數據內容路由的企業服務總線框架,該框架基于面向服務的思想、其松散耦合的體系架構和可重用的服務能為企業節約信息化管理成本。基于規則引擎的消息內容路由機制,使集成系統在面對同一服務調用需要跨越多個應用系統時,能更快地對業務規則變化做出及時的響應。在此框架基礎上實現了汽車制造企業數據集成平臺中的信息集成服務模塊,能自動實現企業數據應用集成,相比傳統的應用集成方式有明顯優勢。