骡3.3.1直到成功的丢失邮件因忙于线程(Mule 3.3.1 until-successful l

2019-10-18 21:33发布

我有2个流。 FlowA接听电话(HTP-入站)和队列上放置消息。 FlowB拿起从这个队列中的消息并进入到成功的循环。 直到成功使外拨呼叫。

<flowA>
  <http-inbound/>
  <put message on queueA/>
</flowA>
<flowB>
  <jms:inbound queueA>
  <until-successful>
     <http-outbound/>
  </until-successful>
</flowB>

我在调试模式下与在出站调用内untilsuccessful取得了断点运行此。 我看到每个调用创建一个新的线程(直到成功的),直到我们达到15。16日起电话,因为线程池已满,继续执行在flowB的线程。 我看到已创建16个flowB线程。 之后,当flowA把一个消息队列,flowB捡起来,但我无法揣摩出它进入下一:(该消息话题丢失!它不试图使任何外拨呼叫。

我想16是默认的线程池的大小。

什么是预期的行为时,直到成功的被阻止? 我预期的消息排队当所有线程都很忙。

请让我知道如果我需要重新表述的问题。

我在调试模式下运行,并且可能已经搞砸了......所以....请多多包涵。

Answer 1:

你说的没错:16是骡子默认线程池的大小。

该消息不应该失去的:它应该在积累until-successful对象存储,等待尽快线程的一个重新可用回升。

核心问题是, until-successful使用默认工作管理器,它作为一种非配置线程轮廓。 如果有可能配置自定义线程轮廓,则应该定义为一个非零值maxBufferSize然后将累加,而不是触发池耗尽动作消息(当然,直到缓冲区满,但那是另一个问题)。

不过,现在实在是没有出路的。 until-successful是固定的16个线程的“如果用尽运行”行动。

这是一个已知的问题:见点#1这里https://www.mulesoft.org/jira/browse/MULE-7035请给予好评这个JIRA。



文章来源: Mule 3.3.1 until-successful losing messages due to busy threads