Mule Esb 入門篇



一、我們爲什麼選擇MULE ESB 

    Mule ESB 是最廣泛使用的開源企業服務線,它有超過一百五十萬下載及兩千五百個產品部署。基於Mule ESB的簡潔部署模式和輕型架構,開發人員可在幾分鐘內輕鬆地創建和集成應用服務。Mule ESB簡化整合開發人員可輕鬆地在多種異構系統中構建高性能,多協議的整合服務。

    伴隨着這些問題,Mule構建自底向上與現實世界集成的能力作爲自己的首要目標。因此,Mule對JBI 容器提供了無縫支持,如果需要的話,允許 ServiceMix 組件和其他實現與Mule的簡化的結構一起使用, 對JBI建模的開發者沒有嚴格的要求。相反,Mule使用簡單的,POJO(Plain Old Java Objects)和基於XML體系,在行業上擁有最短學習曲線之一的配置,多虧了它(Mule)與Java標準的相似。

   當他們(組織)將“一個快速解決當前問題同時爲後續(集成)做好準備的集成方案”作爲他們(組織)首要需求的時候,他們就會選擇Mule。Mule所具有的穩固的標準兼容性,與格式無關的集成方法特性,擁有許多集成專家的活躍的開源社區和具有明確的前進方向,使得組織選擇的集成平臺,能展示出他們基礎設施的全景。
   這裏是一些Mule ESB實在好處:
  • 對開發者沒有任何標準的侷限
  • 簡化了POJO類程序模式,更好的發輝開發者的現有技能而加快部署
  • 支持多種接入點,像是JMS, JDBC, 和SOAP
  • 容易使用 - 只用一個配置文檔便可設置多種服務
  • 支持多種不同數據的轉換
  • 整合平臺模式:高度模塊化,易於擴展的基本代碼 - 基於行之有效的模式生成簡明的解決方案來面對各種獨特的挑戰
  • 開源優勢:衆多的擁有實際經驗的專家和開發人員無私的爲Mule的基本代碼做貢獻
 

二、MULE ESB 是什麼
   

   Mule是一個輕量級的消息框架也是分佈式的對象中介,允許你快速、簡單的連接各個應用來交換數據。以企業級服務總線這個企業集成模式開設計的Mule可以無縫的利用總多的技術像JMS、HTTP、Email、XML-RPC來處理應用之間的交互。 


    簡單的說,Mule就是可以利用各種技術來對不同的應用之間進行連接,來達到應用之間交互的目的。Mule是很容易擴展的,最初的時候,你可能只有幾個應 用通過Mule來進行連接,但是隨着規模的不斷變大,Mule管理的應用可以不斷的增大。Mule對於應用或者組件之間的交互的管理是透明的,不管是否在 同一臺機器上,不管通信的協議是否相同。 Mule是基於企業級服務總線(ESB)架構的思想。Mule是廠商中立的,所以不同廠商的產品都可以連接到Mule系統,你也可以自己進行相應的擴展。

    應用直接需要對於數據進行交換處理,但是應用之間的數據格式肯定是不可能一致的,那麼就需要一個通道來進行數據格式的轉換,我們把應用內部的數據結構叫做Date,把在通道中傳輸的數據叫做Message。 那應用之間的數據格式的轉換以及傳輸這部分的工作都由Mule來完成,而應用只需要關心對業務邏輯的處理,至於數據的轉換和傳輸都由Mule在底層完成。 當然Mule所能處理的要更復雜的多了,包括多通道的傳輸以及消息的過濾等等,這些還是在看Mule的Examples的時候好好的挖掘吧。

三、MULE ESB 的基本概念

   最簡單的說來,Mule應用通過若干像樂高積木一樣的消息處理器來處理消息,這些處理器組合在一起就是一個我們稱之爲flow的過程。理解基本的消息結構以及flow體系是理解Mule的關鍵所在。本質上來講,每一個Mule flow都包含一系列接收、傳輸和處理消息的構件(building block)。

        本文將首先介紹Mule的flow概念,然後分解流經flow的Mule消息組件。

Mule Flow

        在一個flow中,你將若干獨立的組件連接在一起來完成消息的接收、處理以及最終的路由。Flow支持同步和異步的子flow,單向以及請求-響應交換模式,以及其它符合體系結構的選項。你可以將很多flow連接在一起來創建一個完整的應用,部署在(on premise?)Mule或其它應用服務器,或者雲端。

使用Flow開發

        你可以通過兩種方法構建一個Muleflow:

  • 直接向一個基於XML的應用配置文件中敲入幾行代碼
  • 使用Mule Studio的圖形接口將組件圖標整理爲可視化的序列

        接下來,你使用Studio附加的圖形工具來配置這些有序的構件,當然你也可以直接編輯配置文件中的XML代碼來進行配置,或者兩者結合着使用。

Flow的剖析

        最簡單地說,flow是消息處理事件的序列。進入flow中的一條消息可能會流經各種各樣的處理器。下面的示圖中,Mule通過一個請求-響應入站端點(request-response inbound endpoint)來接收消息,將內容轉換成一種新的格式,並在通過消息源返回響應之前,進行業務邏輯處理。


        這些構成了flow的基本單元通常被稱爲構件(在Mule Studio中)或者元素(在單擊或Studio的XML配置中)。總的來說,一個構件在Mule Studio中對應一個icon圖標——圖標則表示一個消息源、處理器或者組件。構件是Mule應用配置文件中一個XML元素的可視化表現形式。

        下圖所示分別爲Mule Studio可視化編輯器中的一個簡單的flow及其對應的XML代碼。


  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.    
  3. <mule xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:spring="http://www.springframework.org/schema/beans" version="EE-3.4.0"  ="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd  
  4.    
  5. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd  
  6.    
  7. http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd  
  8.    
  9. http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd">  
  10. ...  
  11. </mule>  
  12. <flow name="Simple_Example_Flow1" doc:name="Simple_Example_Flow1">  
  13.     <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" doc:name="HTTP" path="kittens"/>  
  14.     <set-payload value="Kittens? Kittens!" doc:name="Set Payload"/>  
  15.     <echo-component doc:name="Echo"/>  
  16. </flow>  

        Mule處理由外部資源(如事件)初始化的消息。例如,一條消息可以由用戶從移動設備出發的一次請求初始化,或者由諸如數據庫中的一次數據變更、SaaS應用中一個新的用戶ID的創建等事件初始化。

        大多數flow中的第一個構件是一個接收器,負責接收新消息並將其放入處理隊列。Mule使用一個消息源元素——上例中的入站HTTP端點(inboundHTTP endpoint)——從一個或多個外部源頭接收消息,於是觸發了一個flow的執行。一個運輸機(transport)攜帶消息在集成與應用層流轉使其得到處理。

        Mule轉換器(transformer)是節點間數據交換的關鍵,它們允許Mule將消息負載數據(payloaddata)轉換爲其它應用可以理解的格式。Mule還能夠進行消息內容的強化,允許你在處理過程中接收額外的數據附加到消息中。

        Mule使用組件(component)來針對特定的業務邏輯(如檢查客戶與清單數據庫)進行末端處理。所以,組件將消息路由給正確的應用(例如一個訂單執行系統)。Mule使用一種被稱爲階段性事件驅動架構(Staged Event-Driven Architecture,SEDA)的架構進行flow中的異步消息處理這一核心功能。值得一提的是,組件不需要使用任何特定的與Mule相關的代碼;它們可以是簡單的POJO、Spring的bean,Java bean,Groovy腳本或者包含了處理數據的業務邏輯web service。組件甚至可以是其它語言開發的,例如Python、JavaScript、Ruby和PHP。Mule構件的種類包括了當前最常用的企業集成模式。

        Flow還可以包含過濾器、作用域、flow控制、錯誤處理策略,以及諸多種類的雲連接器。更多關於這些種類的flow構件,以及關於它們如何能夠被連接起來,爲你的應用提供你需要的確切功能的細節,請參閱Mule應用架構 

        當你配置那些連接到一起組成了你的flow的單獨的元素時,你可以使用Mule表達式語言來提取關於消息或者其環境的信息,並且指導Mule基於這些信息做出處理決策。更多關於Mule表達式語言以及在Mule中如何使用表達式的信息,請參閱Mule表達式介紹

        更詳細的關於消息如何在flow中流轉的細節,請參閱理解Mule體系

Mule消息 

        Mule消息是通過一個或多個flow流經你的應用的數據。它包含兩個重要部分:

  • 消息,包含消息的元數據。
  • 消息負載( payload),由你的業務特定的數據組成。

        一些Mule消息可能包含第三部分:一個附件。不過,由於附件並不常用,我們在這裏將不再贅述。

消息頭

        Mule消息頭包含關於這條消息的元數據。元數據包括屬性和變量,提供了關於這條消息的有用信息,幫助其到達目的地。屬性和變量使用統一的格式:每一個屬性和變量都具有一個name和一個value。name用於在Mule中引用這個屬性或變量,value是其中存儲的信息。所以,name就像是一扇門的鑰匙,value就是門後面的任何東西。

        一條消息的頭部包含的屬性和變量具有特定的域,定義並組織它們如何在消息的整個生命週期中起作用。

        屬性具有兩個主要的域:入站和出站。

  • 入站屬性(inbound properties)由消息源自動生成,用戶不能設置或者操縱這些屬性。
  • 出站屬性(outbound properties)可以由用戶配置。出站屬性是在一個flow的過程中被設置的,並且當消息通過運輸機從一個flow的出站端點傳遞到另個一flow的進站端點的時候,出站屬性可以變爲入站屬性。(注意,如果這條消息是通過flow-ref而不是運輸機傳遞到另一個flow,出站屬性仍然是出站屬性,而不會被轉換爲入站屬性。)

        消息攜帶的屬性信息依據作用域來發送元數據,以便於處理以及避免消息穿過運輸機邊界時發生錯誤——無論是進入一個新的flow,或者是被傳輸到另一個應用。入站屬性持有消息源特定的元數據,以防數據格式混亂或者之後消息生命週期發生其它處理事故。出站屬性持有類似的元數據,不過該元數據在消息進入flow的時候纔有效。出站屬性可以被Mule自動設置,也可以通過開發者在flow中插入一個或多個轉換器來手動設置。

        變量是用戶定義的關於消息的元數據。變量具有兩個作用於:

  • Flow變量只在當前flow存在。
  • Session變量在同一應用的所有flow中都有效。

        變量是關於消息的臨時信息片段,意在用於對它進行處理的應用,而不是隨消息一起被髮送到目的地。所以,變量更有可能被人觸發,反之屬性更有可能被系統設置和觸發。然而,並沒有關於如何使用屬性和變量的嚴格規定。簡言之,有了這些分別被劃分到各自作用域的屬性和變量,Mule支持4種共享相同的鍵/值對結構的元數據。這四種類型有基於它們作用域的不同的應用。

        你可以使用Mule表達式語言( Mule Expression Language,MEL)來設置、觸發和操縱出站屬性,flow變量以及session變量。

消息負載

        消息負載是Mule消息最重要的部分,因爲它是你通過Mule應用發送的數據的內容。你可以在消息頭使用元數據來傳達關於你的消息的信息,或者保護其免受干擾,但是消息的核心——你要傳輸的數據——是消息最初存在的原因。

        然而,負載在流經flow的時候,沒有必要保持不變。Muleflow中各種各樣的消息處理器都可以在沿途影響負載,設置、豐富它的值,或者將其轉換爲新的格式。你也可以在flow中使用MEL從負載中提取信息。



四、MULE ESB 開發環境搭建


(1)、部署mule到本機

A、Mule下載

      從Mule的官方網站(http://www.mulesoft.org/display/COMMUNITY/Home)上下在社區版。目前的最新版本是3.0,下載下來的文件是mule-standalone-{version}.zip

B、安裝

  1. 解壓下載下來的zip文件。如圖中所示    

 

 

  2. 將解壓出來的mule文件夾拷貝到想要的地方,比如放在d:/soft目錄下,然後將其重命名爲mule

  

   3. 鼠標右擊我的電腦 —>屬性—>高級—>環境變量—>系統變量。在系統變量新建MULE_HOME變量,值爲Mule的路徑。

   

  4. 將MULE_HOME變量添加到Path路徑

  

 至此,Mule安裝配置完成。

C、Mule服務啓動

    點擊開始菜單—>運行—>輸入cmd—>進入控制檯—>輸入mule,出現啓動信息。表明配置成功。

 


在這裏注意 java的環境變量配置要修改一下,實際開發的時候應用的的是mule 3.3.0


(2)、安裝開發工具Mule Studio 


第1步 - 下載和安裝Mule Studio 
www.mulesoft.org下載Mule ESB Community Edition的發佈包. 無需安裝, 解壓至本地硬盤即可使用。 

第2步 - 啓動Mule Studio 
在解壓目錄下執行muleStudio.exe以啓動Mule Studio, 並在Select a workspace界面中輸入或選擇一個workspace路徑。


第3步 - First Steps 
如果啓動的是一個新的workspace, Mule Studio會顯示First Steps界面, 選擇Go to Mule Studio開始使用Mule Studio。




五、Mule  ESB-在架構中的常用模式應用


根據實際使用過程中的常見場景,我們總結出MuleESB在項目中的四種常用模式:

1、簡單服務模式


簡單服務模式用於簡化同步服務調用的配置,對應消息傳遞方式中的請求-響應方式。

2、橋接模式


橋接模式用於在inbound endpoint和outbound endpoint之間建立直接連接,不需要component提供業務邏輯

3、校驗器模式


校驗器模式通過定義一個校驗過濾器過濾服務請求,並同步返回ACK(ACKnowledge)或NACK(Not Acknowledge)結果。通過校驗的服務請求被異步分發給處理方。

4、服務代理模式


    Web服務代理模式用於將Web Service請求直接轉發至遠程目標Web Service服務端,Mule本身不提供實際的Web Service。


    簡單的服務,可以通過Mule的流程配置文件通過拖拖拽拽完成。牽扯的複雜的邏輯,我們還是需要手工寫一些類做輔助工作。


    Mule支持多種編程模型,常用的有Web Service,Web Service Proxy,以及基於JMS的消息發佈訂閱等。

MuleESB提供了一個消息框架,用於程序之間的數據交換。應用被封裝成爲服務,服務包含服務組件、消息路由和其它一些配置。Transport使得服務間的數據在不同渠道內得以傳送,並且transport在對數據的傳輸過程中,對需要格式轉換的數據進行數據轉換。

MuleESB 不是取代現有程序架構,相反,MuleESB利用如Apache CXFSpring等開源項目,對自己的項目進行了功能加強。 MuleESB 得以較好的解決各個系統、各種平臺、各種複雜情況的整合。








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章