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