队列消费者有待处理的消息,但它们没有得到处理

时间:2017-08-07 05:12:20

标签: apache-camel activemq spring-jms

我正在使用activemq,camel和spring的组合。对于队列,我们​​有多个消费者;在一些队列消费者中,我们看到有待处理的消息(最多100个与预取相同)并且它们根本没有被处理,而是在同一队列的其他消费者处理,这是正常的。

我深入了解了发生了什么,并发现spring cachingconnectionfactory可能导致此问题 - 我们怀疑这个缓存连接工厂可能会使某些客户端处于非活动状态,而且预处理缓冲区中留下的消息未得到处理。我们的研究结果是对的吗?

除此之外,有什么方法可以从非活动消费者那里获取预取缓冲区中的消息?

1 个答案:

答案 0 :(得分:2)

您不能使用具有变量并发性的CachingConnectionFactory,或者必须禁用消费者的缓存;请参阅DefaultMessageListenerContainer的javadoc。

 * <p><b>Note: Don't use Spring's {@link org.springframework.jms.connection.CachingConnectionFactory}
 * in combination with dynamic scaling.</b> Ideally, don't use it with a message
 * listener container at all, since it is generally preferable to let the
 * listener container itself handle appropriate caching within its lifecycle.

否则空闲的消费者将被放入缓存中。