Mule 是一個基于ESB架構理念的消息平臺。Mule 的核心是一個基于SEDA的服務容器,該容器管理被稱為通用消息對象(Universal Message Objects /UMO)的服務對象,而這些對象都是POJO。所有UMO和其他應用之間的通信都是通過消息端點(message endpoint)來進行的。這些端點為眾多的分立的技術,比如Jms, Smtp, Jdbc, Tcp, Http, Xmpp, file等等,提供了簡單和一致的接口。
Mule 應用通常是由網絡中的許多Mule 實例組成。每一個實例都是一個駐留一個或者多個UMO組件的輕量級容器。每一個UMO 組件都有一個或者多個通過它(們)發送和接收事件的端點。

容器通過UMO組件提供各種各樣的服務,比如事務管理、事件轉換,路由,事件關聯、日志、審計和管理等等。Mule將對象構造從管理手段中分離出來,通常流行框架和IoC/DI 容器,如Spring, PicoContainer 或者 Plexus 可用這種管理手段來構建你的UMO 組件。
很多人認為, "Mule是一個Jms 實現"。實際上,Mule 不是一個Jms server,但是可以配置來使用任何你覺得非常漂亮的Jms server。Mule 的理念是,如果已經有了穩定和廣泛接受的實現,就不會直接實現任何傳輸。例如,Mule 就重用了Axis 和 GLUE 的SOAP棧而不是重新實現一個。Mule 提供了一個一致的服務集來管理任何類型的連接的事件流、關聯、事務、安全和審計。
下面是Mule Server 組件的簡單圖示:


Mule Manager是Mule server 實例的中心(也稱為一個節點戶或者Mule Node)。其主要的角色是管理各種對象,比如Mule實例的連接器、端點和轉換器。這些對象然后被用來控制進出你的服務組件的消息流,并且為Model和它所管理的組件提供服務。
Model
model 是管理和執行組件的容器。它控制進出組件的消息流,管理線程、生命周期和緩充池。默認的MuleModel是基于SEDA的,它使用一個有效的基于事件的隊列模型來獲取的最大的性能和直通性。
UMO Components
UMO代表Universal Message Object;它是一個可以接收來自于任何地方的消息的對象。UMO 組件就是你的業務對象。它們是執行引入的事件之上的具體業務邏輯的組件。這些組件是標準的JavaBean,組件中并沒有任何Mule特定的代碼。Mule 基于你的組件的配置處理所有進出組件的事件的路由和轉換。
Endpoints
Endpoint是Mule的通信能力的基礎。一個Endpoint定義了兩個或者多個組建應用或者存儲庫之間的通信渠道。并且提供了一個強大的機制來允許你的對象在一個統一的方式上再多種協議之上進行交談。端點可以通過消息過濾器、安全攔截器和事務信息進行配置來控制什么消息,在何時,以及怎樣通過端點進行發送和接收。
External Applications
外部應用可以使任何應用,從應用服務器到遺留的傳統應用,主機程序,或者C/S系統。基本上是任何可以產生和操縱數據的應用。因為Mule通過endpoints執行所有通信,UMO 組件并不打算在其中包含應用產生數據,以及應用主流,以及使用傳輸協議的部分。
關鍵特性
- 基于J2EE 1.4的企業消息總線( Enterprise Service Bus (ESB))和消息代理(broker)
- 可插入性連接,比如Jms (1.0.2b 和 1.1), vm (嵌入), jdbc, tcp, udp, multicast, http, servlet, smtp, pop3, file, xmpp等
- 支持任何傳輸之上的異步,同步和請求響應事件處理機制
- 支持Axis或者Glue的Web Service.
- 靈活的部署結構[Topologies]包括Client/Server, P2P, ESB 和Enterprise Service Network.
- 支持聲明性和編程性事務,包括XA 支持
- 對事件的路由、傳輸和轉換的斷到端支持
- Spring 框架集成。可用作ESB 容器,而Mule c也可以很容易的嵌入到Spring 應用中。
- 使用基于SEDA處理模型的高度可伸縮的企業服務器
- 支持REST API 來提供技術獨立和語言中立的基于web的對Mule 事件的訪問
- 強大的基于EIP模式的事件路由機制
- 動態、聲明性的,基于內容和基于規則的路由選項
- 非入侵式的方式。任何對象都可以通過ESB 容器管理
- 強大的應用集成框架
- 完整的可擴展的開發模式
何時使用
一般在這些情形下使用Mule -
- 集成兩個或者多個需要互相通信的或者多個現有的系統.
- 需要完全和周圍環境去耦合的應用,或者需要在系統中伸縮不止一個組件的系統
- 開發人員不知道未來是否會將其應用分發或者伸縮需求的單VM 應用。
項目地址:http://mule.codehaus.org/