Scatter Gather之后,Mule Foreach的计数器为空

时间:2015-11-20 09:34:39

标签: mule

我有一个Mule流程,我在其中配置了Scatter Gather范围,如下所示:

<flow name="simpleScatterGather">
    <http:listener config-ref="HTTP_Listener_Configuration" path="/scatter-gather-test" doc:name="HTTP" />
    <scatter-gather doc:name="Scatter-Gather">
        <flow-ref name="subFlow1" doc:name="callSubFlow1"/>
        <flow-ref name="subFlow2" doc:name="callSubFlow2"/>
    </scatter-gather>
    <logger message="Payload is #[payload]" level="INFO" doc:name="logPayload"/>
    <foreach  doc:name="forEach">
        <logger message="Payload #[flowVars.counter] is : #[payload]" level="INFO" doc:name="logEachPayload"/>
    </foreach>
    <set-payload value="{&quot;message&quot;: &quot;success&quot;}" mimeType="application/json" doc:name="setResponse"/>
</flow>

<sub-flow name="subFlow1">
    <set-payload value="Payload1" doc:name="setPayload" />
</sub-flow>

<sub-flow name="subFlow2">
    <set-payload value="Payload2" doc:name="setPayload" />
</sub-flow>

Scatter之后的记录器收集如下所示的日志。

Payload is [Payload1, Payload2]

很明显,上述有效载荷是一个列表。

foreach日志中的两个记录器如下所示。

Payload null is : Payload1
Payload null is : Payload2

因此,它意味着foreach内部记录器中的MEL表达式#[flowVars.counter]返回null。

当我更改foreach范围以明确包含collection属性时,如下所示:

<foreach  doc:name="forEach" collection="#[payload]">
    <logger message="Payload #[flowVars.counter] is : #[payload]" level="INFO" doc:name="logEachPayload"/>
</foreach>

下面的foreach日志中的两个记录器。

Payload 1 is : Payload1
Payload 2 is : Payload2

现在MEL表达式#[flowVars.counter]按预期工作

任何人都可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

为什么我还不确定,但是分散 - 聚集会返回一个org.mule.DefaultMessageCollection,它似乎弄乱了计数器。但是,如果您明确将collection设置为payload,则可以正常工作。

<foreach doc:name="forEach" collection="#[payload]">
    <logger message="Payload #[flowVars.counter] is : #[payload]"
        level="INFO" doc:name="logEachPayload" />
</foreach>