流引用的Mule循环以非常奇怪的顺序运行

流引用的Mule循环以非常奇怪的顺序运行,mule,mule-studio,Mule,Mule Studio,我有一个按顺序运行三个流引用的循环。至少这是计划。在调试器中运行时,处理按以下意外顺序进行: 第一个流程参考(A) 第二个流程参考(B) 流A的第一个分量 第三个流程参考(C) 流B的第一个分量 流的第二个组成部分是A 流C的第一个分量 流B的第二个分量 流A的第三个组成部分 …现在事情爆炸了(在流C的第1个中),因为负载不是预期的 我将处理策略从隐式更改为“同步”,没有明显的变化 发生了什么事 <flow name="Loop_until_successfull" doc:n

我有一个按顺序运行三个流引用的循环。至少这是计划。在调试器中运行时,处理按以下意外顺序进行:

  • 第一个流程参考(A)
  • 第二个流程参考(B)
  • 流A的第一个分量
  • 第三个流程参考(C)
  • 流B的第一个分量
  • 流的第二个组成部分是A
  • 流C的第一个分量
  • 流B的第二个分量
  • 流A的第三个组成部分 …现在事情爆炸了(在流C的第1个中),因为负载不是预期的
我将处理策略从隐式更改为“同步”,没有明显的变化

发生了什么事

    <flow name="Loop_until_successfull" doc:name="Loop_until_successfull" processingStrategy="synchronous">
        <flow-ref name="A" doc:name="Go to A"></flow-ref>
        <flow-ref name="B" doc:name="Go to B"></flow-ref>
        <flow-ref name="C" doc:name="Go to C"></flow-ref>
    </flow>


将“Loop\u until\u successful”流更改为synchronous只会确保同步处理对“Loop\u until\u successful”的调用,而不一定是它调用的任何其他流。您需要将“Loop_until_successful”调用的每个流更改为同步处理,以确保在调用下一个流之前从每个调用中获得响应。如果这样做,则循环_,直到_成功(我现在将调用L.U.S)调用A,等待响应,然后调用B,等待响应,然后调用C。按照现在的配置方式,L.U.S.呼叫A,然后使用其拥有的有效负载立即移动到B,而不是等待A的响应。

您没有指定是流重新填充子流还是流。看到你报告的行为,我想是有流动的,对吧?另外,入站事件的交换模式是什么?我想是单向的吧?A、B和C流的处理策略是什么?另外:你能显示循环配置吗?我从来没有到过那个部分(添加循环)是的,参考是流。。。是:inbound不希望收到响应。我从来没有加入过一个循环。。。现在我看到,我假设它会有所不同:我可以在整个(所有三个)流引用中循环直到成功。A、B、C都是隐式的。我也看到你和加里的机智是一样的。而且,我将ref'd流更改为sync:这与预期的一样有效。在每个流引用周围添加一个循环直到成功,可能不会产生任何差异,对吗?如果您在继续下一个流之前等待这些流中的任何一个的最终结果,那么在a、B、C周围添加一个循环直到成功,将不会解决您的问题。如果A、B、C被配置为异步,则其中任何一个的until successful将在完成向引用流发送消息后尝试断言success。因此,如果将HTTP Status 200定义为success,则只要对端点的初始调用成功,则无论a流是否完成,对a上HTTP端点的调用都将返回success。这是有效的。我认为请求-响应也会影响到这一点。顺便说一句,我假设您在最后一句话中的意思是“A”,而不是“B”。是的,入站事件的交换模式在Mule的算法中起着重要作用,用于确定flow ref=>flow调用是同步的还是异步的(flow ref=>sub flow始终是同步的)。FWW我们在《骡子行动》第二版的第2章中详细介绍了这类问题,因为面对意想不到的并行性总是令人惊讶。