筆者一直在研究和開發ESB相關項目,最近一週學習了Mule項目,對Mule開源ESB項目有了一定的認識。本文寫一些mule的簡介。在下一篇文章中介紹了Mule的安裝部署和使用例程。
Mule是什麼?
Mule是一個輕量級的基於Java的ESB消息框架,它允許用戶快捷地連接多個應用並且在這些應用之間交換數據。Mule使用了SOA的體系結構思想,可以方便的集成已有的應用。它是可升級的、高分佈式的對象代理,可以通過異步傳輸消息技術來無縫的處理服務與應用之間的交互。
Mule框架提供了一個可升級的環境,可以把自己的業務組件部署在裏面。Mule管理所有組件之間的交互,不管它們是在同一個虛擬機中還是在internet上,也不管底層使用的傳輸方式。
Mule圍繞着企業服務總線(ESB)架構進行設計,保證了不同的組件或者應用可以通過公共的消息總線進行交互,公共的消息總線一般是由JMS或者其他消息服務器來實現。
在應用中會使用不同的技術,包括JMS,Web Services,JDBC,HTTP等等,Mule可以很好地處理他們之間的交互。
Mule有以下的優點:
(1)Mule組件可以是你需要的任何類型。你可以很容易地集成一切從一個"plain old Java object"(POJO)到另一個框架的組件。
(2)Mule和ESB模型允許組件重用。不像其他的框架,mule允許你使用一個已有的組件而不需要改變。組件不需要任何特定的mule代碼,並且沒有要求的API。業務邏輯和消息邏輯保持完全分離。
(3)消息可以是任何格式,從SOAP到二進制圖像文件。mule對體系結構不強制任何設計限制,比如XML消息或者WSDL服務。
(4)你可以以多種拓撲結構開發mule,不僅僅是ESB。因爲它是輕量級的和可嵌入的,mule可以有效地減少到市場的時間,並且增強項目參評,比如安全性,可擴展性。
mulesorce提供了管理工具運行管理你的開發(Mule HQ)和基礎設施(Mule Galaxy)。
理解消息框架
應用網絡化的好處是使得一個應用能夠發送數據到另一個應用。但是許多應用不能夠讀取和處理另一個應用的數據。Mule通過在應用之間提供一個消息框架以消息的方式讀取、轉換和發送數據來解決這個問題。一個消息是一個數據包,它可以在一個特定的管道(channel,也成爲一個queue)中處理和發送。如下圖所示:
理解Mule體系結構
該部分討論了Mule體系結構的不同部分和他們如何處理消息和數據。這裏使用了一個例子:一個公司需要爲客戶訂單(order)產生髮票(invoice),對這些發票執行一些處理後,把它們發送到運輸部門以滿足訂單。
處理過程:
把業務邏輯和消息分離
Mule的一個優點是它能處理通過一系列協議發送的消息。例如,一個發票(invoice)可能是XML格式的,但是它可能通過HTTP到達,也可能是作爲一個JMS消息,這取決於哪個應用創建了這個發票(invoice)。如果服務組件僅僅處理業務邏輯和數據,而不是消息本身,它是如何讀取各種格式的消息的呢?
答案是:服務組件不知道如何讀取消息,因爲默認地,服務組件和消息格式是屏蔽的。取而代之,一個transport單獨攜帶消息,transformer在router傳遞這個消息到服務組件之前改變消息的負載(比如剛纔的invoice),它按照需要格式化使得這個服務組件可以讀取。例如,如果一個XML invoice通過HTTP被髮送,HTTP transport攜帶這個消息,router指導這個消息到達每一個服務組件以處理它,並且transformer按需要沿路改變這個invoice(比如從XML到一個Java對象)。所有的這些transporting,transforming和routing對於消息組件是透明的。
把所有的組織起來
Endpoint是配置的元素,是把所有服務組織起來的關鍵。你在inbound和outbound routers指定endpoint來告訴Mule使用哪個transport,把消息發送到哪裏和服務組件需要接收哪個消息。一個endpoint的主要部分是地址(address),表達成URI,表示了使用的transport、地址和任意額外的參數。
下面說明上圖所示的邏輯數據流:
(1)用戶放一個order到公司網站,並且一個invoice被創建成一個XML格式並且提交到http://myfirm.com/orders。
(2)HTTP transport接收這個XML invoice並且把它包裝成一個Mule message。這個用戶數據服務的inbound endpoint設置成http://myfirm.com/orders,並且它的inbound router指定這個消息必須包含一個Java對象,所以HTTP transport準備轉換這個XMLinvoice並且分發這個消息到這個服務。
(3)XML到對象 transformer把XML invoice轉換成一個Java對象。
(4)這個transport把這個消息傳給用戶數據服務。
(5)用戶數據服務組件查詢master customer database(數據庫)以獲取關於永和的額外數據,並且更新invoice的數據。
(6)HTTP transport使用outbound router配置來決定它必須分發消息到http://myfirm.com/verify。
(7)HTTP transport使用Inventory Verification服務的inbound router配置來獲取消息並且把它傳輸到服務組件。
(8)服務組件更新invoice,有那個warehoused的一個ID code,這個倉庫有所有的現在庫存的invoice。
(9)outbound endpoint 指定一個JMS地址,所有這個JMS transport分發這個消息到order fulfillment application,這個應用挑選訂單。
Mule中的幾個名次解釋:
在下一篇文章中介紹了Mule的安裝部署和使用例程。