为什么使用默认线程配置文件的Scatter/Gather有时会丢失消息



我使用骡子流的可靠交付。这是一个非常简单的情况,从JMS队列(基于ActiveMQ)获取消息,根据其内容调用几个操作,如果一切正常,则将其交付到另一个JMS队列。

一个流是同步的,两个JMS队列都是事务性的(第一个是begin,第二个是JOINS事务),对未交付的消息使用重新交付和DLQ。字面意思:我希望所有消息都被正确地处理或传递到DLQ。

对于处理编排,我使用Scatter/Gather流控制,它工作得很好,直到我使用HTTP连接器调用外部HTTP服务。当我使用默认的线程配置文件时,会发生一些消息丢失(比如5000条消息中的3条)。它们就这样消失了。即使在DLQ中也没有跟踪

另一方面,当我使用自定义配置文件(不使用线程)时,所有消息都得到处理,没有任何问题。

我注意到的是,默认的线程配置文件使用'ScatterGatherWorkManager',而自定义使用'ActiveMQ Session Task'线程。

所以我的问题是:丢失这些消息的可能原因是什么?

我正在使用Mule Server 3.6.1 CE Runtime.

默认情况下,对于没有失败的路由设置了scatter gather,您可以定义自己的聚合策略来处理丢失的消息

custom-aggregation-strategyhttps://docs.mulesoft.com/mule-user-guide/v/3.6/scatter-gather

最新更新