有人可以解释当一个流使用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"/>
flowA正在从队列读取并使用以下命令调用flowB
<flow-ref name="flowB" doc:name="flowB"/>
在这种情况下,是否将在flowA和flowB之间创建另一个队列,以便所有flowB调用在单个线程中一个接一个地执行?
还是flowB将遵循flowA策略,同时处理10条消息?
案例2。
flowA是从队列中读取的同步流。
它正在调用一个具有最大允许1个最大线程的异步flowB,如下所示:
<queued-asynchronous-processing-strategy name="procB" maxThreads="1" doc:name="procB"/>
异步块具有自己的策略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.
将为流B创建具有1个线程的另一个队列。
VM接收器池线程-> procA中的SEDA线程-> procB中的SEDA线程
案例2。
如上所述,将为流B创建具有1个线程的另一个队列。
VM接收器池线程->来自procC的SEDA线程->来自procB的SEDA线程
流程处理策略在Mule documentation中进行了介绍,但我发现它没有太大用处。可以在Anypoint Studio中设置这些流,并使用Loggers确定在特定时间运行的线程,这很简单。
关于mule - 流引用和处理策略,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41278159/