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

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


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