JMS预取+缓存消费者+滞留消息

时间:2015-05-06 12:51:17

标签: java spring jms activemq spring-jms

我正在努力让JMS消费者为ActiveMQ服务器工作,但是我遇到了一些问题,哪些解决方案似乎只会导致更多问题。

我正在使用Spring的DMLC(cacheLeve设置为CACHE_CONNECTION)和CachingConnectionFactory(cachingConsumers设置为true)将Activemq自己的ConnectionFactory包含在部署在Jboss AS中的Webapp中。

根据这个http://activemq.apache.org/what-is-the-prefetch-limit-for.html这样的设置应该有一个预取设置为0但是在我们的测试中,当我们这样做时,我们注意到DMLC调用fetch命令时带有-1超时意味着它等待来自永远的经纪人,这反过来导致Web应用程序挂起,每当我们试图从Jboss取消部署它,所以它实际上是取消部署。

将预取更改为更高的值会导致消息卡在activemq中,如第6点http://tmielke.blogspot.se/2012/03/camel-jms-with-transactions-lessons.html所述,消费者从不使用他们预取的消息。

似乎无论如何,你遇到了一些问题。作为最后的手段,我尝试了代理方面的AbortSlowAckConsumerStrategy设置,但这会导致这些消费者经常中止,听起来并不是这个设置的重点。

有没有人遇到同样的问题?是否有任何方法可以设置高速预取的高速缓存消费者以获得不会遇到麻烦的性能?

1 个答案:

答案 0 :(得分:0)

在DMLC的连接工厂中缓存消费者并没有什么好处,因为无论如何消费者通常都是长寿的。使用动态扩展(可调整并发)时会导致问题,因为消费者被缓存,任何预取的消息都会卡在缓存中。关闭CF中的消费者缓存。

有关更完整的说明,请参阅this answer