Mule消息是通過一個或多個流傳遞應用程序的數據。它由兩個主要部分組成:
. 消息頭(Message Header),它包含關於消息的元數據
.消息有效負載(Message Payload),它包含您的特定的業務數據。
Mule消息本身嵌入在Mule消息對象(mule message object
)中。一些Mule消息對象可能包含變量(variables)、附件(attachment)和異常有效負載(exception payloads)。附件和異常有效負載不經常被使用或被操縱。
屬性和變量(properties and variables)
出站屬性是可變的, 它們是在流的過程中設置的,當消息從一個流的出站端點通過傳輸傳遞到另一個流的入站端點時,就可以成爲入站屬性。它們包含與入站屬性類似的元數據,但在消息進入流之後,將應用出站屬性。出站屬性可以由Mule自動設置,用戶可以通過手動在流中插入一個或多個transformer元素來設置它們。請注意,如果消息通過流引用而不是連接器傳遞給新的流,那麼出站屬性仍然是出站屬性,而不是轉換爲入站屬性(見下圖)。
變量是關於消息的用戶定義的元數據。變量有三個範圍:
.Flow variables流變量只適用於它們存在的流。
.Session variables會話變量適用於同一應用程序中的所有流。
.Record variables記錄變量只適用於處理作爲批處理的一部分的記錄。
變量是關於消息的臨時信息,這些信息是用於處理它的應用程序所使用的,不是將消息傳遞給它的目的地。因此,變量更有可能由人來設置,而屬性更可能由系統設置和調用。但是,對於如何使用屬性和變量,並沒有嚴格的規則。
設置和使用屬性(properties)和變量(variables)
Mule包括三個消息處理程序,您可以使用它們來設置、複製或刪除消息流中的出站屬性和變量。
當您在流中包含其中一個轉換器時,Mule會添加、複製或刪除消息頭或對象的元數據。(還有第四種消息處理器:記錄變量轉換器可以在一個批處理中設置或刪除一個記錄中的變量。例如,您可能希望向消息中添加一個屬性,以便在消息中設置HTTP傳輸頭。或者,如果您的流查找與用戶相關的帳戶編號,您可能想要在消息中添加一個變量,以便將帳戶號存儲爲消息上的元數據。下面的表描述了這三個消息處理器:屬性轉換器(Property Transformer)、變量轉換器(Variable Transformer)和會話變量轉換器(Session Variable Transformer)。
|
Property |
Variable |
Session Variable |
Use |
使用屬性轉換器在消息的出站範圍內設置、刪除或複製屬性。 |
使用變量轉換器在消息上設置或刪除一個流變量,並綁定到當前流。 |
使用會話變量轉換器來設置或刪除與當前消息綁定在整個生命週期中的變量,跨多個流、應用程序,甚至是服務器。 |
Persistence |
一旦消息到達outbound-端點,出站範圍內的所有屬性都以消息的形式發送,以特定於傳輸的元數據的形式(例如,HTTP消息頭的HTTP頭)。 |
變量轉換器設置的變量只對當前流進行持久化,不能跨越傳輸障礙。 |
使用會話變量轉換器設置的會話變量在整個消息生命週期中都存在,而不考慮傳輸障礙。 請注意,當使用支持會話的傳輸協議時,會話變量會在傳輸障礙中持續存在。 |
例如,下面的流在消息上設置了一個出站屬性-一個時間戳。
要訪問您在流中的消息或應用程序中不同的流中設置的屬性或變量,請使用MEL表達式。
Type |
Set or Remove |
Copy |
Access using MEL |
Outbound Property |
Property Transformer |
Property Transformer |
messsage.outboundProperties |
Inbound Property |
|
|
|
Session Variable |
|
|
sessionVars |
Variable |
Variable Transformer |
Variable Transformer |
|
例如,如果您想根據前面在處理中添加到消息頭的時間戳屬性來路由消息,那麼可以在選擇路由器中使用表達式來訪問出站屬性使用消息。
使用message.outboundProperties
訪問時間戳屬性並計算屬性值(即消息上的時間戳)。
類似地,一旦設置了會話變量,就可以使用Mule表達式中的sessionVars映射來訪問它。
例如,如果您已經設置了一個名爲“SVname”的會話變量和值“SVvalue”,那麼您可以使用表達式sessionVars的SVname來調用這個會話變量,
該變量的值爲SVvalue。訪問一個變量, 在前面的表達式中使用flowVars代替sessionVars。
消息有效負載(message payload)
消息有效負載是Mule消息中最重要的部分,因爲它包含了Mule應用程序處理的數據。您可以將元數據應用到消息頭或消息對象中,以傳遞有關消息的信息,
或將其從被篡改的信息中保護出來,但是消息的核心——您正在傳輸的數據——是消息首先存在的原因。
payload並不一定和它通過流傳播的一樣。Mule流中的各種消息處理器可以通過設置、充實或將其轉換爲一種新的格式來影響payload。
您還可以使用MEL表達式從一個流中的payload中提取信息。
設置一個消息的payload
使用Set payload息處理器來完全替換消息有效負載的內容。輸入一個字符串或Mule表達式,該表達式定義了Mule應該設置的新負載。
下面的示例用一個字符串來替換有效負載,該字符串會讀取”Hello,Myfriend! ”
豐富一個消息的payload