Mule簡介

    筆者一直在研究和開發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中的幾個名次解釋:

    1. Connectors :就是支持不同協議的連接器。例如:Http,FTP,Mail,Soap,JMS和MW等等.通常連接器有三種類型:只用於接收,只用於發送和兩者皆可。
    2. EndPoints Address:終端地址,類似於jms://topic:myTopic這樣的東西。前面的jms就是連接器的類型。後面是各個連接器能識別的地址。這 個地址可以是接收器識別的地址,例如:jms://topic:myTopic表示對myTopic這個隊列進行監聽。也可以是發送器識別的地址。例如 pop3://user:[email protected]將某一個消息發送到遠程郵箱裏面。
    注意這裏的地址是你自己命名的,通常不同的應用有不同的地址,例如某個應用是jms://topic:myTopic。另一個是jms://topic:myTopic2
    3. UMO Components :可以想象成這是ESB總線上的一個個芯片,控制器。在Mule裏面,他們是一些POJO,負責接收消息,然後進行處理,在發送出去。例如,一個UMO它 的作用是監聽jms://topic:myTopic裏面的消息,如果有,加以處理後發送到pop3: //user:[email protected]這個郵箱裏面。
     顯而易見,UMO通過簡單的調用EndPoints Address來接收消息和轉發消息。它不需要知道自己按照什麼協議接收和發送消息。這就是ESB的作用所在,即提供統一的總線接口。
   
    在下一篇文章中介紹了Mule的安裝部署和使用例程。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章