流程参考和处理策略

时间:2016-12-22 07:49:01

标签: mule

当有人使用flow-ref调用另一个流时,有人可以解释一下Mule处理策略是如何工作的吗?

案例1。
假设我们有两个流:flowA和flowB,处理策略为procA和procB,两者都是异步的,但procA有10个线程允许,而procB只有1个。

<queued-asynchronous-processing-strategy name="procA" maxThreads="10" doc:name="procA"/>
<queued-asynchronous-processing-strategy name="procB" maxThreads="1" doc:name="procB"/>

flowA正在从队列中读取并使用

调用flowB
<flow-ref name="flowB" doc:name="flowB"/>

在这种情况下会在flowA和flowB之间创建另一个队列,以便所有的flowB调用在一个线程中逐个执行吗? 或者flowB将遵循flowA策略,可能同时处理10条消息?

案例2。

flowA是从队列中读取的同步流。 它调用异步flowB,允许1个最大线程,如下所示:

<queued-asynchronous-processing-strategy name="procB" maxThreads="1" doc:name="procB"/>

async块拥有自己的策略procC,允许10个线程:

<queued-asynchronous-processing-strategy name="procC" maxThreads="10" doc:name="procC"/>  

flowA正在调用flowB:

<async doc:name="Async" processingStrategy="procC">
<flow-ref name="flowB" doc:name="flowB"/>
</async>

问题类似:
在这种情况下,异步块和flowB之间是否会创建另一个队列,以便所有的flowB调用在一个线程中逐个执行? 或者flowB将遵循procC策略,同时处理10条消息?

1 个答案:

答案 0 :(得分:4)

案例1。

将为流程B创建另一个具有1个线程的队列。

VM接收器池线程 - &gt;来自procA的SEDA线程 - &gt;来自procB的SEDA线程

案例2。

如上所述,将为Flow B

创建另一个具有1个线程的队列

VM Receiver池线程 - &gt;来自procC的SEDA线程 - &gt;来自procB的SEDA线程

流程处理策略包含在Mule documentation中,但我没有发现它过于有用。可以直接在Anypoint Studio中设置这些流,并使用Loggers来确定在特定时间运行的线程。