Mule消息轉(zhuǎn)換
為了更好的理解Mule消息處理器的運作,可以對處理前后的消息進行查看吮炕。轉(zhuǎn)換器對消息負載進行轉(zhuǎn)換,即可以是數(shù)據(jù)結構的轉(zhuǎn)換也可以是數(shù)據(jù)格式的轉(zhuǎn)換:從JSON到Java對象访得,Map到CSV或者Java對象到XML龙亲。觀察前后的變化有助于理解Mule是如何對消息內(nèi)容進行操的作:變更,刪除或者添加悍抑,以便在流程圖中進一步對消息進行處理鳄炉。
本文用到了Mule消息結構一文中的應用示例相類似的應用,用來驗看消息通過流程圖中的消息轉(zhuǎn)換組件(DataWeave)時的表現(xiàn)搜骡。在Anypoint Studio中以調(diào)試模式運行該程序拂盯,通過可視化調(diào)試器來查看斷點處的節(jié)點消息中的內(nèi)在結構。
背景
本文通過在Mule的圖形界面Anypoint Studio中運行的示例程序來對細節(jié)進行說明记靡。其中會結合XML配置以及Studio的界面截圖谈竿。閱讀本文前請確保你已熟悉了Mule和Anypoint Studio的界面,并且已經(jīng)閱讀了Mule消息結構一文摸吠,已理解了Mule消息的概念空凸。
通過示例理解Mule消息
為了理解Mule消息,本文使用了將CSV文件轉(zhuǎn)換成Salesforce聯(lián)系人數(shù)據(jù)的示例程序寸痢。
簡言之呀洲,文件節(jié)點從輸入目錄中每隔10秒輪詢新的文件。當發(fā)現(xiàn)新的文件啼止,會讀取其中內(nèi)容并將其傳給消息轉(zhuǎn)換器組件道逗,該組件使用DataWeave代碼對消息負載進行轉(zhuǎn)換。該組件在將CSV的內(nèi)容格式化成集合的同時將CSV文件中的字段(譬如FirstName献烦,LastName等等)映射成Salesforce所需的字段滓窍。每個組映射都會用箭頭連接線顯示對應關系,來幫助用戶可視化的理解映射的邏輯仿荆。在將文件中的內(nèi)容轉(zhuǎn)換到Salesforce可以接收的集合對象后贰您,通過Salesforce連接器推送到你的Salesforce賬號中坏平。通過連接器的配置來指定"操作"為"創(chuàng)建
"、"s對象類型"為"聯(lián)系人
"锦亦,以指示連接器將數(shù)據(jù)上傳到Salesforce舶替,創(chuàng)建新的聯(lián)系人。
消息轉(zhuǎn)換前
正如在Mule消息結構文中所述杠园,消息包含了兩個重要的部分
消息頭部顾瞪,其中包含有屬性
消息的負載,包含了Mule要處理的數(shù)據(jù)
Mue消息對象抛蚁,包含著Mue消息陈醒,也可能包含變量。下面列出了上例中的消息的頭部瞧甩,負載和變量在消息進入轉(zhuǎn)換組件之前的狀態(tài)
為了查看消息的頭部和負載信息钉跷,我們在應用的消息處理器中設置斷點,然后在Studio的調(diào)試模式運行應用肚逸。Studio的可視化調(diào)試器顯示消息的頭部信息爷辙,而位于設計界面的下部的Mule調(diào)試器Console則會顯示消息的負載信息。
更多關于如何查看消息內(nèi)容的說明:可視化調(diào)試器
消息頭部
下圖的Mule消息顯示的是存在于消息頭部中的數(shù)據(jù)(比如元數(shù)據(jù))朦促。這個例子中膝晾,可以看到消息的身份信息,還可以看到是否帶有附件(若帶有附件會以數(shù)組形式呈現(xiàn))务冕。
注意Name為Message Processor
,Value為Transform Message
的這一項血当。Message Processor 項代表著當前消息在flow中的下一個消息處理器。
消息負載
下圖中payload是包含了消息的負載禀忆,或者說包含了Mule應用處理的數(shù)據(jù)臊旭。在消息通過Transform Message組件之前,負載包含了CSV文件油湖,Name是currentFile
巍扛,Type是java.io.File
屬性
可視化調(diào)試器 在消息進入Transform Message組件時候,還會顯示消息中的所有傳入和傳出數(shù)據(jù)乏德。傳入屬性是與負載相關的元數(shù)據(jù)撤奸,包括文件名、時間戳以及進入的節(jié)點(例子里是MULE_ORIGINATING_ENDPOINT)喊括。傳入屬性是只讀的胧瓜,并且無法通過應用中的消息處理器添加刪除或復制。
類似的郑什,傳出屬性顯示了有關于負載的信息府喳,但是可以被應用中的消息處理器刪除或復制。
變量
可視化調(diào)試器 顯示了進入Transform Message組件消息的所有的變量或者session變量蘑拯。流程圖中文件節(jié)點在消息中設置了兩個變量钝满,一個是指示Transform Message組件處理后的文件的移動位置兜粘,另一個是指示輪詢目錄請求新數(shù)據(jù)的時間間隔。
沒有被設置的Session變量
消息轉(zhuǎn)換后
這個應用中的Transform Message組件的任務是將CSV文件中的內(nèi)容轉(zhuǎn)換成Salesforce能夠處理的Java對象弯蚜。并且會將文件中不同字段的值轉(zhuǎn)換到對應的Salesforce中的屬性孔轴,比如將Name字段抓暖到Salesforce的contract屬性。下面的圖中會顯示消息在經(jīng)過該組件后的內(nèi)容碎捺。
消息頭部
消息頭部的內(nèi)容沒有變化
消息負載
消息的負載發(fā)生了巨大的變化路鹰!變成了來自CSV文件的聯(lián)系人信息,以一個包含map元素的array list的形式存在收厨。每一個map代表了CSV中的一行晋柱,展開map元素可以看到包含每行記錄對于值的鍵值對。
屬性
Mule消息處理器不能對傳入屬性進行添加诵叁,刪除或其他操作雁竞。所以傳入屬性沒有發(fā)生變化。
組件也沒有對消息的傳出屬性做出任何的修改黎休。
變量
Transform Message組件沒有對變量和session變量做改動
更多示例
在消息中設置一個變量
流程圖中的變量轉(zhuǎn)換器在消息中設置了一個minPrice變量浓领,其值是消息的負載。還記得界面的中Message Processor指的是flow中下一個處理組件吧势腮?
<flow>
...
<set-variable doc:name="Variable" value="#[payload]" variableName="minPrice"/>
...
</flow>
進入屬性轉(zhuǎn)換器前
進入屬性轉(zhuǎn)換器后
設置消息中的屬性
流程圖中的屬性轉(zhuǎn)換器在消息中設置了size屬性,其值是small漫仆。(原文有錯誤)
進入屬性轉(zhuǎn)換器前
進入屬性轉(zhuǎn)換器后
設置消息的負載
<flow>
...
<set-payload doc:name="change payload" value="Hello, World."/>
...
</flow>
Flow中的負載轉(zhuǎn)換器將消息的負載替換成了字符串:"Hello, World."(原文代碼片段missing)
進入屬性轉(zhuǎn)換器前
進入屬性轉(zhuǎn)換器后
學習使用MEL表達式可以查看同flow或其他flow中設置的消息屬性和變量捎拯。
查看Mule消息結構一文中的頭部設置和使用屬性與變量