mule:分散-聚集:如果在分散-聚集组件中设置目标变量,如何聚集来自不同路径的变量?

mule:分散-聚集:如果在分散-聚集组件中设置目标变量,如何聚集来自不同路径的变量?,mule,mule4,Mule,Mule4,使用Mule 4,散射-聚集组件,我将目标变量设置为“结果”。 我还有两个变量 firstVar:在“散布-聚集”组件外部定义,但在一条管线内部更新 第二个变量:在“散射-聚集”组件内定义 当我运行代码时,我希望看到firstVar(已更新)、secondVariable,并在分散聚集完成时生成vars。 但我只看到具有初始值的firstVar 观察:如果我删除目标变量结果,我会看到firstVar(更新)、secondVariable和聚合负载 有人能解释一下我做错了什么吗 参考代码: <

使用Mule 4,散射-聚集组件,我将目标变量设置为“结果”。 我还有两个变量

  • firstVar:在“散布-聚集”组件外部定义,但在一条管线内部更新
  • 第二个变量:在“散射-聚集”组件内定义
  • 当我运行代码时,我希望看到firstVar(已更新)、secondVariable,并在分散聚集完成时生成vars。 但我只看到具有初始值的firstVar

    观察:如果我删除目标变量结果,我会看到firstVar(更新)、secondVariable和聚合负载

    有人能解释一下我做错了什么吗

    参考代码:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <mule xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
        xmlns:http="http://www.mulesoft.org/schema/mule/http"
        xmlns="http://www.mulesoft.org/schema/mule/core"
        xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
    http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
    http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd">
        <flow name="ScatterGather-ExampleFlow"
            doc:id="5dec6c32-4da7-4be0-91e1-26744e6e4761">
            <http:listener doc:name="Listener"
                doc:id="a75d1ddb-0481-45be-992d-39e397160257"
                config-ref="HTTP_Listener_config" path="/api/scattergather" />
            <logger level="INFO" doc:name="Logger"
                doc:id="9bb44a1f-287f-415c-b19f-87798797cfa8"
                message="Starting Scatter Gather Sample" />
            <set-variable value='#["First Value"]'
                doc:name="First Variable"
                doc:id="1eb7430b-f6a8-4366-8594-8f76479148ab" variableName="firstVar" />
            <scatter-gather doc:name="Scatter-Gather"
                doc:id="ef921649-8269-46ba-b38e-8e55f2694368" target="result">
                <route>
                    <ee:transform doc:name="Transform Message"
                        doc:id="c5b2717c-5917-4641-aa4c-2283614cc4af">
                        <ee:message>
                            <ee:set-payload><![CDATA[%dw 2.0 output application/java 
                --- payload]]></ee:set-payload>
                        </ee:message>
                        <ee:variables>
                            <ee:set-variable variableName="firstVar"><![CDATA[%dw 2.0 output application/java --- 
                "updated First Value"]]></ee:set-variable>
                        </ee:variables>
                    </ee:transform>
                    <set-payload value='#["First route PAyload"]'
                        doc:name="Set Payload"
                        doc:id="8c479443-dd94-410e-9346-fedb7c0d3d71" />
                </route>
                <route>
                    <set-variable value='"secondValue"'
                        doc:name="SecondVariable"
                        doc:id="6f78c3a7-ae00-4693-93ca-da98217d36d4"
                        variableName="secondVariable" />
                    <set-payload value='#["2nd routePayload"]'
                        doc:name="Set Payload"
                        doc:id="aad2f059-2a35-4c29-85d7-45e33f317e59" />
                </route>
            </scatter-gather>
            <logger level="INFO" doc:name="Logger"
                doc:id="d03caeac-41e3-4dc9-8b67-de1da841011c" message="#[vars]" />
        </flow>
    </mule>
    
    

    我猜这与分配给目标变量所丢弃的事件有关。这可能是意料之中的。事件包含消息/有效负载和变量。使用目标仅将结果有效负载分配给变量。已修改事件的其余部分将丢失


    我建议使用一个有效负载,将所有需要的数据存储为附加属性。稍后您可以使用DataWeave从负载的其余部分提取属性。

    我猜这与分配给目标变量而丢弃的事件有关。这可能是意料之中的。事件包含消息/有效负载和变量。使用目标仅将结果有效负载分配给变量。已修改事件的其余部分将丢失


    我建议使用一个有效负载,将所有需要的数据存储为附加属性。稍后,您可以使用DataWeave从负载的其余部分提取属性。

    如果没有目标变量,在所有处理路由完成执行后,分散-聚集组件将创建一个新的Mule事件,该事件将合并来自每个路由的所有结果Mule事件,然后将新的Mule事件传递给流中的下一个组件


    如果使用“分散-聚集->常规->目标”,则会将结果有效负载(多个mule事件)填充到新的目标变量中,并保留原始mule事件及其变量

    在没有目标变量的情况下,在所有处理路由完成执行后,“分散-聚集”组件将创建一个新的Mule事件,该事件将合并来自每个路由的所有结果Mule事件,然后将新的Mule事件传递给流中的下一个组件

    如果使用“分散-聚集->常规->目标”,则会将结果有效负载(多个mule事件)填充到新的目标变量中,并保留原始mule事件及其变量