我正在使用activemq,camel和spring的组合。对于队列,我们有多个消费者;在一些队列消费者中,我们看到有待处理的消息(最多100个与预取相同)并且它们根本没有被处理,而是在同一队列的其他消费者处理,这是正常的。
我深入了解了发生了什么,并发现spring cachingconnectionfactory可能导致此问题 - 我们怀疑这个缓存连接工厂可能会使某些客户端处于非活动状态,而且预处理缓冲区中留下的消息未得到处理。我们的研究结果是对的吗?
除此之外,有什么方法可以从非活动消费者那里获取预取缓冲区中的消息?
答案 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.
否则空闲的消费者将被放入缓存中。