Mule 为什么使用带有默认线程配置文件的散布/聚集有时会丢失消息?

Mule 为什么使用带有默认线程配置文件的散布/聚集有时会丢失消息?,mule,Mule,我在骡流中使用可靠的交付。这是一个非常简单的案例,它从JMS队列(基于ActiveMQ)获取消息,根据消息的内容调用多个操作,如果一切正常,则将消息传递到另一个JMS队列 流是同步的,两个JMS队列都是事务性的(第一次开始,第二次加入事务),使用重新传递,DLQ用于未传递的消息。字面意思:我希望所有消息都被正确处理或传递给DLQ 对于处理编排,我使用的是分散/聚集流控制,在我使用HTTP连接器调用外部HTTP服务之前,它工作得非常好。当我使用默认线程配置文件时,一些消息会丢失(比如5000条消息

我在骡流中使用可靠的交付。这是一个非常简单的案例,它从JMS队列(基于ActiveMQ)获取消息,根据消息的内容调用多个操作,如果一切正常,则将消息传递到另一个JMS队列

流是同步的,两个JMS队列都是事务性的(第一次开始,第二次加入事务),使用重新传递,DLQ用于未传递的消息。字面意思:我希望所有消息都被正确处理或传递给DLQ

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

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

我注意到的是,默认线程配置文件使用“ScatterGatherWorkManager”,而自定义使用“ActiveMQ会话任务”线程

所以我的问题是:失去这些信息的可能原因是什么


我使用的是Mule Server 3.6.1 CE运行时。

默认情况下,为无故障路由设置分散聚集。您可以定义自己的聚集策略来处理丢失的消息

自定义聚合策略

不清楚您为什么会使用消息。在我看来,最好创建、测试和共享一个最小的例子来复制这一点。只是一些注释:1)记住HTTP不是事务性的(只有JDBC,JMS,VM是骡子),2)考虑使用直到成功的HTTP请求者作为控制失败的手段。