我已经完成了这个
我对RUN
poolExhaustedAction。
如果poolExhaustedAction设置为RUN
并且池中没有可用的线程,请求接收方线程是否会继续流?如果是这样,这是一个同步处理吗?
编辑:假设我有一个骡流配置,如:
Receiver
,Flow
和Dispatcher
的线程池大小为1。最后poolExhaustedAction
和Receiver
的{{1}}为Dispatcher
。
使用上面提到的配置,我的问题如下,想象一下Flow线程池已用完,来自Receiver池的(只有一个)线程收到来自客户端的新请求。这个接收器线程会继续流程处理还是等待?如果我理解正确,接收器线程不会等待,因为它的RUN
设置为poolExhaustedAction
。从接收器线程的角度来看,这不是一个同步处理吗?那么设置RUN
处理策略有什么用?
现在我更改了上述配置,以便将asynchronous
Dispatcher's
设置为poolExhaustedAction
。上面的接收者线程会等待调度程序线程吗?我不这么认为。
请澄清我的疑问。提前谢谢。
答案 0 :(得分:2)
请参阅以下链接,其中我解释了WAIT和RUN poolExhaustedAction值。
Mule Exhausted Action RUN vs WAIT. Which one to choose and when
有关RUN的问题。
在异步处理streategy的情况下,是的。当流线程耗尽时,请求接收器线程继续处理请求。但这不是同步的。因为如果有4个接收器线程,则所有4个接收器线程可能会继续处理请求。他们都可能并行运行。
回答编辑的OP: 因为只有一个线程正在执行处理并不意味着同步。如前所述,Receiver线程仅在流线程池耗尽后才启动。意味着流程线程都忙于处理,在这种情况下,一个线程仍在处理,并且不能采取新的处理请求。所以接收器线程开始处理。所以这仍然不是同步的。
希望这能回答你的问题。