開源消息框架Mule配置基礎

      本文轉載自:http://duguyiren3476.iteye.com/blog/1403114

Mule是開源的企業集成消息框架,,它的配置需要使用大量的XML文件,本文就對這些配置文件進行介紹,首先還是普及一下Mule基礎常識。

  什麼是Mule?

  Mule是一個透明的,基於Java的消息框架,它允許不同的應用程序連接,從而擺脫應用程序之間直接相互調用的情況,Mule支持多線程/消息模式(默認是階段式事件驅動架構,SEDA),輸入和輸出到不同的傳送器(email,文件,數據庫等),以及通過協議如SOAP 發送到Web Service,如圖1所示。

  

圖- 1 Mule支持多種協議

  Mule沒有要求要一個統一的消息格式,它允許在與不同服務相互操作時指定轉換,Mule企業版支持多個商業消息系統,包括TIBCO Rendezvous和IBM WebSphere MQ。

  它的架構採用了三層:應用層,集成層和傳輸層。Mule實現了企業服務總線(ESB),併爲面向服務的架構(SOA)提供了一個平臺。分層的方法提升了可複用性,如圖2所示。

 

 圖- 2 分層的方法提升了可複用性
點此發表你的看法>>【已有位網友發表了看法】

  安裝Mule

  Mulesource.org網站上提供了兩個Mule版本:

  1、企業版(需購買許可,有商業化支持,可從http://www.mulesource.com/download/ee/下載試用版);

  2、社區版(功能少一點,但是免費的)。

  對於Mule 2.x版本,需要安裝JDK 1.5(http://java.sun.com/javase/downloads/index_jdk5.jsp)和Ant 1.7.1(http://ant.apache.org/bindownload.cgi)或Maven 2.0.9(http://maven.apache.org/download.html)。

  Mule使用入門指南在http://www.mulesource.org/display/MULE2INTRO/Offline+Documentation,如果開放工具使用的是Eclipse,最簡單的辦法是將classpath設置包括./lib/mule和./lib/opt目錄下的所有.jar文件。
點此發表你的看法>>【已有位網友發表了看法】

  運行Mule

  Mule可以嵌入到Java應用程序、應用程序服務器或Web應用程序中,要運行Mule,你必須指定一個配置文件,這個配置文件描述了Mule的各項配置參數,有多種方法啓動Mule:

  1、在命令提示符後
mule [-config ]

  2、從一個腳本
org.mule.MuleServer -config mule-config.xml
//創建一個新的服務器,使用兩個配置文件
MuleServer server = new MuleServer("mule-config1.xml,mule-config2.xml");
//啓動服務器,布爾參數值確定了服務器是在一個新線程中啓動還是就在當前的線程中啓動
server.start(true);

  3、通過指定配置生成器的全限定類名,如果不指定,Mule就使用默認值org.mule.config.builders.AutoConfigurationBuilder:
  3、通過指定配置生成器的全限定類名,如果不指定,Mule就使用默認值org.mule.config.builders.AutoConfigurationBuilder:

  4、通過分配一個具體的服務器ID與Mule環境交互:
AutoConfigurationBuilder configbuilder = new AutoConfigurationBuilder("C:/MuleConfDir/mule-config.xml");
DefaultMuleConfiguration muleConfig = new DefaultMuleConfiguration();
muleConfig.setId("MY_SERVER_ID_1");
MuleContextBuilder contextBuilder = new DefaultMuleContextBuilder();
contextBuilder.setMuleConfiguration(muleConfig);
MuleContext muleContext = new DefaultMuleContextFactory().createMuleContext(configbuilder, contextBuilder);
muleContext.start();
點此發表你的看法>>【已有位網友發表了看法】

  Mule組件

  本節定義組成Mule消息框架的不同組件,並介紹如何用XML來配置這些組件,這裏的討論針對的是Mule 2.x版本。

  服務組件

  服務是Mule用於實施集成解決方案的主要元素,一個服務組件是一段實現了某些業務功能的代碼,如圖3所示。Mule的一個主要優點是服務組件可以是簡單的沒有預先存在外部接口的POJO(Plain Old Java Objects,簡單Java對象),在Mule 1.x等早期版本中,服務組件被稱爲通用消息對象(universal message objects,UMO)。

  

圖- 3 服務組件

  Mule爲任何服務器組件提供了可插拔的連接性,使用特定的Mule配置設置,定義服務的特定行爲,把外部消息轉換成服務組件函數的調用,並控制它的生命週期,配置這個轉換的是一個XML文件(默認是mule-config.xml),這個文件指定了消息流,應該指向服務組件。

  Mule消息

  Mule中的消息完全是一個數據包,它可以在一個特定通道上或端點上應用程序之間發送,一個消息也相當於一個由外部事件觸發的事件,如收到隊列中的數據或一個文件被拷貝到某個目錄中,你可以使用Mule客戶端編程產生Mule消息。

  服務端點

  端點的功能相當於網關,或者說是連接服務組件到外部消息的通道,它可以位於本地也可以位於網絡上,如圖4所示,Mule可以被配置爲在端點上攔截消息,如果需要,然後將消息進行轉換,轉換後再傳遞給服務組件。

  

圖- 4 入站(Inbound)和出站(Outbound)端點

  服務可以使用不同的傳輸器來接收和發送消息,對服務將要使用的每種傳輸器,你可以使用一個獨立的端點。

  消息路由

  消息路由控制組件如何接收消息,以及在處理後應該發送到何處去,入站路由控制服務如何處理入站消息(如,有選擇地允許那些符合特定標準的消息),出站路由控制服務處理完消息後該將其發往何處(如,將其發送到接收者的列表,或將消息拆分,然後發送到不同的端點),如圖5所示。

  

圖- 5 入站和出站路由

  路由是和過濾器結合工作的,過濾器指定限制條件,只有符合條件的消息才能被路由到服務,幷包括一個表達式從當前消息中提取信息。

  傳輸器和連接器

  傳輸器實質上就是數據運輸工具,它使用特定的協議在應用程序之間運輸消息,如圖6所示。Mule支持多個標準的傳輸器(JMS,HTTP等),並可以通過擴展org.mule.transport.AbstractConnector創建自定義傳輸器。

  

圖- 6 Mule提供的傳輸器

  連接器表示特定傳輸器的配置,例如,JMS使用一個隊列或一個主題來接收或發送數據,HTTP連接器使用一個端口來交換數據,具體的隊列,主題和端口在連接器內部指定,連接器可以全局指定(爲整個Mule應用程序)或在服務級本地指定。

  轉換器

  數據轉換是一種讓迥然不同的組件之間可以相互理解對方的消息的技術,消息經歷轉換彌補了兩個組件的數據表現之間的差異,Mule翻譯器(也叫做轉換器)是Java類,如圖7所示。

 [img]http://image4.it168.com/2009/7/22/01a31b8f-1c22-4c5e-977e-690fc0eda2e6.jpg
[/img]
 圖- 7 轉換器翻譯消息

  轉換的例子包括從一種XML消息轉換成另一種XML格式,或將XML消息轉換成Java對象,轉換器用於將轉換接收到的數據,然後以特定協議發送出去,如JMS傳輸器使用的ObjectToJMSMessage轉換器。

  Mule配置了大量的轉換器,並允許你通過擴展AbstractTransformer創建專用的轉換器。

  服務可能被限制到本地網絡或只能使用本地或私有的傳輸器,私有傳輸器不被外部應用程序支持,通過提供一個能夠通過轉換器轉換和通過端點訪問服務組件的消息框架,Mule爲常見的intranet/Internet消息交換提供了一個組件服務。

  使用Mule客戶端

  Mule客戶端是一個爲Java客戶端從Mule服務器或其它應用程序接收或發送消息的簡易接口,一般說來,消息是由外部事件觸發的,如隊列上接收到一個消息,或一個文件被拷貝到某個目錄下。

  通過在單元測試或負載測試中引入消息,Mule客戶端可以幫助測試消息流,如果你在相同的類加載器中使用Mule客戶端(如一個Web應用程序或單獨的Mule),客戶端將會訪問服務器配置,例如,如果在你的服務器配置文件中定義了以下端點:

<http:endpoint host="192.168.0.1" port="80" path="/services" name="serviceEndpoint"/>

  那麼這個端點就可以被Mule客戶端訪問:

MuleClient client = new MuleClient();
client.dispatch("serviceEndpoint", dataObject, null);

  如果你以獨立模式運行Mule客戶端,你要使用它自己的Mule XML文件進行配置:
MuleClient client = new MuleClient();
client.dispatch("serviceEndpoint", dataObject, null);

發佈了5 篇原創文章 · 獲贊 6 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章