为什么消息卡在慰借服务器上?

时间:2016-01-28 09:09:03

标签: java spring jms spring-jms solace

我正在使用spring DMLC进行以下设置的应用程序,我面临着DMLC的奇怪行为,如果我只在侦听器队列上发送1000条消息~1990很快到达dmlc并且~10卡在服务器上,在进一步的分析我发现那些10的确认没有被发送回来,这就是为什么我可以在服务器上看到它们,几分钟之后,ack被送回但非常缓慢。

此外我在CachingConnectionFactory中尝试了cacheConsumers=false并且一切都变得很好,但这使得频繁绑定/取消绑定到mq服务器并在jmv中创建巨大的消费者对象,是否有人有任何解决方案如何解决此问题保持{ {1}}?

cacheConsumers=true

1 个答案:

答案 0 :(得分:3)

您可以在cachingConnectionFactory上将cacheConsumer设置为false,并在DefaultMessageListenerClass上将cacheLevel更改为级别3(CACHE_CONSUMER)。这样,消费者将被缓存在DMLC级别,并且应该解决卡住消息的问题,而不会看到频繁的绑定/解除绑定。

cacheConsumer应设置为false,并且您应该让DefaultMessageListenerClasse控制缓存,因为最好让侦听器容器在其生命周期内处理适当的缓存。 Spring文档中的以下注释(http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jms/listener/DefaultMessageListenerContainer.html)讨论了这一点:

  

注意:不要将Spring的CachingConnectionFactory与   动态缩放。理想情况下,不要将它与消息监听器一起使用   容器,因为通常最好让听众   容器本身在其生命周期内处理适当的缓存。   此外,停止和重新启动侦听器容器只能使用   一个独立的本地缓存连接 - 不是外部连接   缓存了一个。