当有人使用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条消息?
答案 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来确定在特定时间运行的线程。