我对Mule线程配置文件Exhausted_Action有疑问。从文档中我了解到,当操作是WAIT时,maxActive之外的任何新请求都将等待线程可用。而RUN的动作,会导致使用原始线程来处理请求。根据我的理解,我认为WAIT是更好的方式,而不是运行。但是,看起来MULE的所有默认值都设置为RUN。只是想听听我对这两个行为之间的理解和差异的评论,以及如何确定何时使用哪一个。
答案 0 :(得分:4)
您对WAIT和RUN的承诺是正确的。
所有默认值都是RUN的原因是,由于流线程不可用,因此不会停止消息处理。因为原始线程(或接收器线程)无论如何都在等待Flow线程接收消息和进程,为什么不处理它。 (这是我的意见)。
但是使用RUN有一个缺点。
前:
No of receiver threads are restricted to 2.
<asynchronous=processing-strategy name="customAsynchronous" maxThreads="1" />
<flow name="sample" processingStrategy="customAsynchronous" >
<file:inbound-endpoint ......>
............
..........
</flow>
文件大小:1MB,50MB,100MB,1MB,5MB。
在上述流程中有5个文件进入.3个文件被处理,因为有1个可用的流程线程和2个文件接收器线程(Exhausted_Action = RUN)。当第一个文件很小并且一直等待下一条消息时,流程线程将快速完成处理。不幸的是,接收器线程的工作是选择下一个文件并将其交给Flow线程来处理BIG文件。这样,当流线程正在等待时,接收器线程有可能在耗时的处理中受到攻击。
所以它始终取决于您正在处理的用例。
希望这有帮助。