企業內建對公司管理提出顯著轉變的需要,緻力于 一體化的努力通常對業務産生深遠的影響,但是如果缺乏标準的內建方案,導緻概念和技術學習難度增加。
內建定義:将不同的計算機系統,公司或個人連接配接起來, 企業內建是使不同的應用程式協同工作,産生一個統一的功能集的任務。
內建類型
- 資訊門戶
- 資料複制
- 共享業務功能
- 面向服務的體系結構
- 分布式業務流程
- 企業對企業內建
企業內建模式:
- 檔案傳輸
- 共享資料庫
- 遠端過程調用
- 消息
基于消息的EAI:
消息內建分以下步驟實施:
- construction消息建構
- Channels 通道
- Endpoints 端點
- Routing 路由
- Transformation 轉換
- Management 管理
- Messaging Models 消息模型
- Transactions 事務
目前有Spring Integration, Mule ESB 和 Apache Camel. 三種開源內建架構,它們都遵循企業內建模式EIP(EIP, http://www.eaipatterns.com),各有細微的差別。
Construction 消息建構
消息是一個資料單元格式, 一個消息由一個頭,屬性和主體的組成 發送方轉換資料輸出構造消息 接收方重新從消息恢複成自己的資料模型 。
(1). Spring內建的消息模型如下:
特點:
- 一個基于模型的消息中最簡單的形式
- 使用泛型規定消息體類型
- 無marshaling 或 un-marshaling 需要
(2). JBI(Java業務內建)的模型如下:
特點:支援附件和XML 以及安全。
(3). Apache Camel的消息模型:
消息交換模式(基于WSDL 2.0 message exchange patterns EXP):消息被封裝到消息交換Exchange中。
Channels 消息通道
信道是用于從發送者發送消息到接收器的網關, 發送者和接收者不知道對方,實作最大化松耦合,也 可以被稱為管pipe
(1). Spring Integration的通道是一個純POJO模型:
(2). Java Business Integration JBI是一個建立消息交換的工廠,支援同步或異步。
Endpoints 消息端點
一個端點是一個消息傳遞應用程式,它能夠發送和接收消息的用戶端, 消息端點封裝了消息系統,并與應用程式分離,也是其一部分,自定義了為特定的應用程式和任務的一般消息處理API
(1). Spring Integration實作:
代碼實作如下:
消息通道最大的問題是:通道容納消息總會有一個容量,如果有大量消息發送到,而接受者并沒有來得及消費,那麼需要很大的容量保留這些消息,這是因為傳統通道是一個順序處理的模型,使用SEDA: Staged Event-Driven Architecture 階段EDA能夠解決這個問題。通過引入線程池立即響應消息處理。
事件隊列接受傳入的事件, 事件處理器EventHanlder處理傳入的事件, 線程池提供了線程功能的事件處理程式, 該控制器調節資源配置設定和排程動态。
Routing 消息路由
消息路由器會從一個消息通道消費消息,并根據一組條件将其重新釋出到不同的消息管道.
Spring內建架構實作路由代碼如下:
消息轉換Transformation
消息轉換是轉換一個資料格式到另一種的過濾器。在消息處理前可以使用各種過濾器:
系統管理
下圖中Control bus控制總線使用由應用程式使用的資料相同的消息傳遞機制,參考工作流設計,分離不同的管道進行傳遞消息。
消息模型
區分為Publish/Subscribe 釋出者/訂閱者 或點對點 Point-to-Point Model,也就是1:N或1:1的模型。
存儲消息
保證一次且僅一次的消息傳遞,使用 透明的消息用戶端。
消息的事務性
生産者将在事務上下文中發送一個或多個消息, 生産者送出事務; 消費者收到的所有消息, 消費者送出事務。
SOA內建架構Spring Integration, Mule ESB or Apache Camel比較
什麼時候使用Apache camel
EDA
使用Apache CXF開發Web服務
使用Spring Webservices建立SOAP服務代理