美文网首页
Mule消息转换

Mule消息转换

作者: 麦克斯杜 | 来源:发表于2018-07-08 15:55 被阅读0次

    Mule消息转换

    Mule官方原文链接

    为了更好的理解Mule消息处理器的运作,可以对处理前后的消息进行查看。转换器对消息负载进行转换,即可以是数据结构的转换也可以是数据格式的转换:从JSON到Java对象,Map到CSV或者Java对象到XML。观察前后的变化有助于理解Mule是如何对消息内容进行操的作:变更,删除或者添加,以便在流程图中进一步对消息进行处理。

    本文用到了Mule消息结构一文中的应用示例相类似的应用,用来验看消息通过流程图中的消息转换组件(DataWeave)时的表现。在Anypoint Studio中以调试模式运行该程序,通过可视化调试器来查看断点处的节点消息中的内在结构。

    背景

    本文通过在Mule的图形界面Anypoint Studio中运行的示例程序来对细节进行说明。其中会结合XML配置以及Studio的界面截图。阅读本文前请确保你已熟悉了Mule和Anypoint Studio的界面,并且已经阅读了Mule消息结构一文,已理解了Mule消息的概念。

    通过示例理解Mule消息

    为了理解Mule消息,本文使用了将CSV文件转换成Salesforce联系人数据的示例程序。

    简言之,文件节点从输入目录中每隔10秒轮询新的文件。当发现新的文件,会读取其中内容并将其传给消息转换器组件,该组件使用DataWeave代码对消息负载进行转换。该组件在将CSV的内容格式化成集合的同时将CSV文件中的字段(譬如FirstName,LastName等等)映射成Salesforce所需的字段。每个组映射都会用箭头连接线显示对应关系,来帮助用户可视化的理解映射的逻辑。在将文件中的内容转换到Salesforce可以接收的集合对象后,通过Salesforce连接器推送到你的Salesforce账号中。通过连接器的配置来指定"操作"为"创建"、"s对象类型"为"联系人",以指示连接器将数据上传到Salesforce,创建新的联系人。

    image

    消息转换前

    正如在Mule消息结构文中所述,消息包含了两个重要的部分

    • 消息头部,其中包含有属性

    • 消息的负载,包含了Mule要处理的数据

    Mue消息对象,包含着Mue消息,也可能包含变量。下面列出了上例中的消息的头部,负载和变量在消息进入转换组件之前的状态

    为了查看消息的头部和负载信息,我们在应用的消息处理器中设置断点,然后在Studio的调试模式运行应用。Studio的可视化调试器显示消息的头部信息,而位于设计界面的下部的Mule调试器Console则会显示消息的负载信息。

    更多关于如何查看消息内容的说明:可视化调试器

    消息头部

    下图的Mule消息显示的是存在于消息头部中的数据(比如元数据)。这个例子中,可以看到消息的身份信息,还可以看到是否带有附件(若带有附件会以数组形式呈现)。

    注意NameMessage Processor,ValueTransform Message的这一项。Message Processor 项代表着当前消息在flow中的下一个消息处理器。

    image
    消息负载

    下图中payload是包含了消息的负载,或者说包含了Mule应用处理的数据。在消息通过Transform Message组件之前,负载包含了CSV文件,Name是currentFile,Type是java.io.File

    image
    属性

    可视化调试器 在消息进入Transform Message组件时候,还会显示消息中的所有传入和传出数据。传入属性是与负载相关的元数据,包括文件名、时间戳以及进入的节点(例子里是MULE_ORIGINATING_ENDPOINT)。传入属性是只读的,并且无法通过应用中的消息处理器添加删除或复制。

    image

    类似的,传出属性显示了有关于负载的信息,但是可以被应用中的消息处理器删除或复制。

    image
    变量

    可视化调试器 显示了进入Transform Message组件消息的所有的变量或者session变量。流程图中文件节点在消息中设置了两个变量,一个是指示Transform Message组件处理后的文件的移动位置,另一个是指示轮询目录请求新数据的时间间隔。

    image

    没有被设置的Session变量

    image

    消息转换后

    这个应用中的Transform Message组件的任务是将CSV文件中的内容转换成Salesforce能够处理的Java对象。并且会将文件中不同字段的值转换到对应的Salesforce中的属性,比如将Name字段抓暖到Salesforce的contract属性。下面的图中会显示消息在经过该组件后的内容。

    消息头部

    消息头部的内容没有变化

    image
    消息负载

    消息的负载发生了巨大的变化!变成了来自CSV文件的联系人信息,以一个包含map元素的array list的形式存在。每一个map代表了CSV中的一行,展开map元素可以看到包含每行记录对于值的键值对。

    image image
    属性

    Mule消息处理器不能对传入属性进行添加,删除或其他操作。所以传入属性没有发生变化。

    image

    组件也没有对消息的传出属性做出任何的修改。

    image
    变量

    Transform Message组件没有对变量session变量做改动

    image image

    更多示例

    在消息中设置一个变量

    流程图中的变量转换器在消息中设置了一个minPrice变量,其值是消息的负载。还记得界面的中Message Processor指的是flow中下一个处理组件吧?

    <flow>
    ...
    <set-variable doc:name="Variable" value="#[payload]" variableName="minPrice"/>
    ...
    </flow>
    

    进入属性转换器前

    image

    进入属性转换器后

    image
    设置消息中的属性

    流程图中的属性转换器在消息中设置了size属性,其值是small。(原文有错误)

    进入属性转换器前

    image

    进入属性转换器后

    image
    设置消息的负载
    <flow>
    ...
    <set-payload doc:name="change payload" value="Hello, World."/>
    ...
    </flow>
    

    Flow中的负载转换器将消息的负载替换成了字符串:"Hello, World."(原文代码片段missing)

    进入属性转换器前

    image

    进入属性转换器后

    image

    学习使用MEL表达式可以查看同flow或其他flow中设置的消息属性和变量。
    查看Mule消息结构一文中的头部设置和使用属性与变量

    更多内容

    NEXT STEP: 关于全局元素

    关于Studio可视化调试器

    相关文章

      网友评论

          本文标题:Mule消息转换

          本文链接:https://www.haomeiwen.com/subject/bpuouftx.html