mule studio基礎了解
Mule studio
了解概況:
Mule譯為文,騾子、倔強之人它的圖標確實也與騾子有幾分神似。Mule是一個以java為基礎的企業服務總線(ESB),該集成平臺允許開發者在遵循SOA服務導向式架構方法學下快速便捷的將不同應用程序連接在一起交換數據。可以忽略各個應用程序中使用的不同技術,使他們集成在一起。
Mule中的思想:
Flow:
流,也就是消息流是由接收消息,處理消息,為消息選擇路徑等一系列組件組成的。它是mule中的核心思想,十分重要。以下是一個簡單flow的例子以及代碼:
<flow name="Simple_Example_Flow1" doc:name="Simple_Example_Flow1">
<http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" doc:name="HTTP" path="kittens"/>
<set-payload value="Kittens? Kittens!" doc:name="Set Payload"/>
<echo-component doc:name="Echo"/>
</flow>
具體細節后面會有講的。
流中可以依據功能劃分為三大類:
Message processor(消息處理器):對消息進行加工處理,如filter,transformer,router等。
Message source(消息源):flow開始的地方,接收消息進入流中,觸發處理器,如:Inbound/Outbound Endpoints。
Component(組件):主要實現一些特殊的功能,mule studio中提供的完成不了的。
Mule Message:
消息,是通過整個應用程序可能流經很多flow。它有兩個重要的組成部分:
Message header:包含該消息的基本的元數據。元數據是由屬性(properties)和變量(variables)組成,元數據可以為我們提供有用的信息,譬如告訴我們這個消息去向哪里。元數據都有一個特定的范圍來規定它的生命周期。
屬性(properties)的范圍有兩種:
Inbound properties:在消息源頭被創建,不能被用戶設置和修改。
Outbound properties:可以被用戶配置,outbound屬性如果隨著一個message從一個Flow的outbound endpoint(出口端)流近另一個Flow的Inbound endpoint(入口端)可以變成Inbound properties。在一些特殊情況,如新的Flow是flow-ref而不是transport的話,范圍還是沒有改變。
變量(variables)是用戶自定義的元數據,也有兩種范圍:
Flow variables:僅存在當前flow中。
Session variables:存在這應用程序中。
Message payload:是你真正要在應用程序中傳輸的數據,消息頭中的元數據只是起到更好的表明要傳輸的數據,而payload才是你真正要傳輸的數據。
工作環境:
Canvas:是用來布局各個組件的,你可以在右上角搜索需要的組件名或者根據分類查找。
下面可以切換三種視圖,message flow:就是當前視圖、global elements:定義的全局元素、configuration xml:xml編輯的視圖。
Package explorer:flows文件中存放的.mflow文件,就是canvas中顯示的文件。
Outline:縮略圖。Console:控制平臺。
全局元素:
你可以定義元素為全局的,這樣可以在多處調用,定義全局有兩種方法,一種在global elements中直接添加一個,選擇你要添加的元素以及相應屬性。另一種是在xml編輯環境編寫。Note:全局元素要有name屬性,這樣才可以被別處調用。通過<元素名-ref name=””>標簽被調用。
Visual editor(視圖編輯):
中間是畫布,用來將各種元素拖拽到這里布局配置,右側是提供的各個元素,分成了八類,依次是Endpoints, Scopes, Components, Transformers, Filters, Flow control, Error handling, Cloud connectors。如果你想使用哪個元素,直接拖拽到畫布上,雙擊即可以打開配置面板,配置相應屬性。
以下會分開講各類元素功能以及相應配置,視圖編輯和xml編輯在一起講,最后會有綜合在一起的例子。
Endpoints(端點):
用來接收和發送數據,負責連接外部資源并發送數據。分為Inbound endpoints輸入端點,Outbound endpoints輸出端點。端點需要關聯一個connector連接器完成輸入輸出。如果沒有配置連接器系統會默認配置一個。
我們創建一個例子,右側拖拽一個http端點到畫布上,再在filter上搜索echo,找到在components中,拖拽跟http端點放在一起。Echo是一個輸出組件,如圖:
雙擊http端點,出現配置面板如圖。
這里有五個選項標簽,
General中可以配置顯示名稱,默認為http。
信息交換模式,有one-way和request-response。單向和請求響應。
Host,port,path等。
Advanced中http outbound在這里會比inbound多一個是否重定向的選項。
我們什么也不需要配置,直接ok.
右鍵點擊flows文件夾中mflow文件,選擇作為mule application程序運行。
在瀏覽器中打http://localhost:8081/任意字符,回車。就會在瀏覽器中出現該字符。
看一下xml配置文件:
<flow name="sudy_muleFlow1" doc:name="sudy_muleFlow1">
<http:inbound-endpoint exchange-pattern="request-response" host="localhost"
port="8081" doc:name="HTTP"/>
<echo-component doc:name="Echo"/>
</flow>
首先定義了一個流,命名為sudy_muleFlow1,顯示名為sudy_muleFlow1。在流中我們首先定義了一個http的inbound-endpoint,設置了交換模式為請求-響應,主機為localhost,端口號為8081,顯示名為HTTP。接著是輸出組件echo。這就構成了一個最基本的流。這里沒有定義連接器,系統會提供一個默認的給它。
Scopes(范圍):
可以理解為用這里的元素可以將某一些元素規劃成一個整體,一個系統分成各個組成部分。這里有Async(異步),flow(流),foreach(循環),sub-flow(子流)等。
Components(組件):
用來處理一些特殊的業務邏輯的元素,當你想將傳來的消息message,進行特定的處理,篩選,都可以使用這里的組件。Echo就是在這里分類里。Expression表達式,是一個很有用的元素。這里支持很多語言,script,python,ruby,groovy等等。
這里要細講下expression,我們可以根據自己的需要定制表達式。<expression evaluator=”” expression=””/>之后通過語法#[evaluator:expression ]調用,但這是mule 3.3以前的版本要求的了。現在可以直接#[expression]調用,默認調用的是Mule Expression Language(MEL).下面給幾個例子,感受下expression的作用。
獲得當前消息message中需要的信息:
#[message.payload]
#[message.inboundProperties[‘propertyName’]]
給信息賦值
#[message.payload=’A information’]
#[message.outboundProperties[‘Authorization’]=Base64.encode(‘username password’)]
MEL 語法:
這是一個非常靈活的工具,你可以使用MEL完成各樣的表達式,譬如:常量,簡單的運算,操作復雜的數據結構或者調用對象的方法;你還可以使用它運算regex和xpath函數。
讓我們再看幾個簡單的例子:
#[2+2] </td> |
這表達式值就是4 </td> </tr> | |||||||||||
#[2+2==4] </td> |
這個表達式值為true </td> </tr> | |||||||||||
#[message] </td> |
這個涉及到四大context object(message, app, mule, server)之一,值為message </td> </tr> | |||||||||||
#[message.id] </td> |
這個message的id,它是唯一的 </td> </tr> | |||||||||||
#[message.payload[‘name’]] </td> |
Payload中key是name的值 </td> </tr> | |||||||||||
#[message.header.get()] </td> |
調用header中的get()方法 </td> </tr> </tbody> </table>
看過這些例子是不是已經感覺到expression的強大了?如果平時你需要的就在上面的話,就可以到此為止了,或者想更深入的了解這里,可以直接去官網看英文的也是個不錯的選擇, http://www.mulesoft.org/documentation/display/current/Mule+Expression+Language+MEL,這是官方的解釋。 我們在上一個例子中再加入一個expression,表達式中寫成#[message.payload='hello world!'],如圖: 再次運行,在瀏覽器中輸入http://localhost:8081/任意字符,在瀏覽器中顯示的都是hello world!。
Transformers(轉換器): 在消息傳輸過程中,各元素可能接受數據的格式不同,我們需要將數據轉換到元素希望接受的格式,這個時候我們就要用上轉換器了。Mule 中提供了很多樣式的已經封裝好的轉換器供我們使用,如果沒有合適的我們也可以自己定義轉換器。 通過<custom-transformer class=”” doc:name=””/>來引用定制的轉換器。 自定義轉換類可以繼承抽象類AbstractMessageTransformer并覆蓋其中: Public Object transformerMessage(MuleMessage message,string outputEncoding)方法可以實現處理轉換。參數為 消息message和輸出編碼。 例子: <sub-flow name="subSubSonSingleUnit" doc:name="subSubSonSingleUnit"> <custom-transformer class="com.neusoft.nems3.esb.transformer.SonUnitTransfomer" doc:name="Java"/> <flow-ref name="subSubProtocolChoice" doc:name="Flow Reference"/> <custom-transformer class="com.neusoft.nems3.esb.transformer.SonUnitTransfomerEnd" doc:name="Java"/> </sub-flow> 這里定義了一個子流,其中有兩個自定義的轉換器和一個引用全局的流,過程是先經過SonUnitTransfomer轉換處理,消息再流入subSubProtocolChoice流,流出之后再由SonUnitTransfomerEnd轉換器處理消息
Filtes(過濾器): 顧名思義,就是過濾掉不需要的信息,保留需要的信息。Mule同樣為我們提供了多樣已經封裝好的過濾器。有異常過濾器,表達式過濾器,信息屬性過濾器,負載過濾器,引用全局過濾器。
Flow control(路徑控制): 用來控制信息流的流向,這里有Splitter將信息根據條件拆分,并發送給相應的后續處理,All,Choice是將信息全部發送或者根據條件有選擇的發送出去,還提供了很多路徑控制方案。 Error handling(錯誤處理): 這里有捕獲異常策略,選擇異常策略,引用全局的異常策略,以及回滾異常策略 Cloud connectors(云端連接器): 用來將mule application部署在云端。
基礎知識: 我們已經簡單的過了一遍各個分類中的元素,現在我們開始通過一個較完整的例子。 開始前還要先了解一下,配置文件的基本知識,整個xml配置文件是依據xml Schemae語法規則,整個文件中使用的標簽需要在最上面引用命名空間。xml根節點是<mule></mule> 里面的標簽都是閉合的,如果某標簽中不含其它標簽可以直接閉合如<flow/>。在<mule>中最上面可以通過<configuration></configuration>配置整個程序的配置信息。Mule xml實際是spring xml文件的擴張,所以你可以在這里使用spring的功能,例如配置一些bean,如果你有很多配置文件可以引入到一起。如: <spring:beans> <spring:bean id="configBean" class="com.neusoft.common.customized.CustomizedPropertyConfigurer" name="Bean"> <spring:property name="locations"> <spring:list> <spring:value>classpath:error.properties</spring:value> <spring:value>classpath:sql.properties</spring:value> <spring:value>classpath:security.properties</spring:value> <spring:value>classpath:protocol.properties</spring:value> <spring:value>classpath:commonKey.properties</spring:value> </spring:list> </spring:property> </spring:bean> <spring:bean id="Spring_Util" class="com.neusoft.nems3.esb.util.SpringContextUtil" name="Bean1"/> <spring:import resource="classpath:applicationContext.xml" /> </spring:beans> Xml編輯器中:綠色代表節點元素、紫色代表節點屬性、藍色代表屬性值。 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
相關經驗相關資訊 |