试图找出递归调用骡流的正确方法。递归调用骡流
我们有一个流程,它在运行时构建一个工作数组,然后在“For Each”块内使用“流参考”递归调用自身。问题是,我们还没有找到将参数传递给这个递归流的正确方法,所以我们没有得到我们期望的结果。
我们尝试使用流属性(Groovy中的setInvocationParameter())传递参数,但它似乎是跨流的多个实例共享的。 例如,我们有ForEach数组迭代包含[2的数组。 3. 4],但取决于时机,这些值中的一些会丢失(我们通常会看到2,然后是4次 - 跳过3)。
我们尝试过不同的骡子处理策略,没有任何运气。 Mule的默认排队异步存在上述问题。同步似乎不起作用(有意义,因为我们的递归模型可能需要两个实例至少运行)。
下面是配置XML的相关部分(整个流程非常大)。在流的结尾是这样的:
<foreach collection="#[sessionVars['actionArray']]"
counterVariableName="actionIndex"
rootMessageVariableName="actionVar" doc:name="For Each">
<scripting:component doc:name="Run Each Action">
<scripting:script engine="Groovy">
<![CDATA[def aa = message.getSessionProperty('actionArray')
def this_item = aa.get(message.getInvocationProperty('actionIndex'))
// Pass the desired action for the recursive call
message.setInvocationProperty('FlowAction', this_item)
log.info "Running $this_item" // <- Shows the correct item
return]]>
</scripting:script>
</scripting:component>
<flow-ref name="DoAction" doc:name="Do Action"/>
</foreach>
在流的前部,有一个显示“FlowAction”流量变量的记录器。当我们用[2,3,4]阵列测试时,这个记录器语句被驱动三次(如预期的那样),但通常使用值2,4和4.
我们在Mule 3.7上得到了相同的结果和一个旧的3.4系统(都是社区版)。
感谢从骡行家那里任何建议...
你可以发布你的xml吗? –