mule message
在mule的组件与组件之间、流与流之间的是通过消息进行交互的,在mule中称为mule message,结构如下:
mule message主要包含两个部分:
消息头:主要指该消息的一些元数据;
消息体:该部分在mule中称作payload,主要传递一些业务数据。
mule message 包含在消息对象(message object)中,一个消息对像除了可以包含mule message,还可以包含变量(variable)、附件(attachment)、异常payload(exception payload),这些部分都可以从上图看出。
消息头
消息头包含两部分,这两部分属于属性。分别是Inbound properties和Outbound properties。
Inbound properties:该部分是由消息源自动生成的,不能改变,即不允许用户去设置。该部分主要是关于该消息的一些元数据,比如请求的路径、请求的ip等。当Inbound properties在流内部传递时将会得到保留,而在流之间进行传递时,将会丢失:
Outbound properties:该部分是可变的,用户可以在流中对其进行设置。如果Outbound properties从一个流的出站端点留到另外一个流的入站端点,那么这个Outbound properties将会变成Inbound properties。但是如果另外一个流是使用流引入这种方式引入的话,那么这个Outbound properties属性依然为Outbound properties属性:
变量
变量是用户定义的关于消息的一下元数据,变量有三个作用域:
(1)、Flow variables:流内可使用;
(2)、Session variables:在同个应用的不同流可使用;
(3)、Record variables:仅适用于作为批次的一部分处理的记录。
在官方的文档中有这样的说明:变量比较适合保存一些临时的属性,而不应该和消息一起传递到目的地。变量应该是由用户人工创建的,而属性更倾向于由系统调用自动产生,但是并没有严格的去限定如何去使用变量或者属性。
可进行的操作
在mule中,可以对属性和变量进行设置、拷贝和删除操作,这些操作可以通过三个组件实现,每个组件都提供以上三个操作,这三个组件分别是:
Property Transformer:对Outbound properties的属性进行设置、拷贝或删除
Variable Transformer:可以设置、拷贝和删除变量,设置的变量只在当前流中有限,在当前流之外的流将无效。
Session Variable Transformer:该组件设置的变量,可以在当前应用的多个流中使用。
访问mule message各部分的消息
可以用MEL(mule expression language)访问消息中不同部分的内容:
Outbound Property:#[message.outboundProperties]
Inbound Property:#[message.inboundProperties]
Session Variable:#[sessionVars]
Variable:#[flowVars]
payLoad
payLoad是mule message中很重要的一部分,因为它是承载着应用需要使用的数据。mule中很多组件可以改变payLoad的内容(例如用set payLoad组件),同时也可以通过MEL获取payLoad里面的内容。
在某些情况下,你可能希望调用外部资源,并使用响应来丰富消息有效载荷,而不是替换它。 为此,您可以使用Message Enricight scope(或wrapper)封装一个或多个执行获取信息任务的消息处理器。Mule会添加或丰富payLoad,并调用资源。