流程参考和处理策略

spo*_*boy 5 mule

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

情况1.
假设我们有2个流: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"/>
Run Code Online (Sandbox Code Playgroud)

flowA正在从队列中读取并调用flowB

<flow-ref name="flowB" doc:name="flowB"/>
Run Code Online (Sandbox Code Playgroud)

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

案例2.

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

<queued-asynchronous-processing-strategy name="procB" maxThreads="1" doc:name="procB"/>
Run Code Online (Sandbox Code Playgroud)

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

<queued-asynchronous-processing-strategy name="procC" maxThreads="10" doc:name="procC"/>  
Run Code Online (Sandbox Code Playgroud)

flowA像这样调用flowB:

<async doc:name="Async" processingStrategy="procC">
<flow-ref name="flowB" doc:name="flowB"/>
</async>
Run Code Online (Sandbox Code Playgroud)

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

小智 4

情况1。

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

VM 接收池线程 -> 来自 procA 的 SEDA 线程 -> 来自 procB 的 SEDA 线程

案例2。

如上,将为 Flow B 创建另一个具有 1 个线程的队列

VM 接收器池线程 -> 来自 procC 的 SEDA 线程 -> 来自 procB 的 SEDA 线程

Mule 文档中介绍了流处理策略,但我认为这并没有太大用处。在 Anypoint Studio 中设置这些流程并使用记录器来确定在特定时间运行的线程非常简单。