JMS预取 缓存的消费者 卡住消息



我正在尝试让JMS消费者朝着ActiveMQ服务器努力,但是我遇到了一些问题,这些问题似乎只是引起更多问题。

我正在使用Spring的DMLC(cacheleve设置为cache_connection)以及一个cachingConnectionFactory(CachingConsumers设置为true)包装ActiveMq自己的ConnectionFactory在JBOSS AS的Web App中包装ActiveMq自己的ConnectionFactory。

根据此http://activemq.apache.org/what-is-the-prefetch-limit-for.html这样的设置应该在测试中预拿到0,但是当我们这样做时,我们注意到了这一点DMLC以-1超时调用fetch命令,这意味着它永远等待经纪人的消息,而这又导致Web应用程序在我们试图从JBOSS上解开它时会挂起,因此Nevber实际上不受影响。

将预摘要更改为较高的值会导致消息陷入ActiveMQ中,如第6点所述,此处http://tmielke.blogspot.se/2012/03/camel-jms-jms-with-transactions-transactions-lassactions-lastons.html消费者切勿食用他们预取的消息。

看来,无论您走了,都遇到了一些问题。作为最后的手段,我尝试了经纪人方面的AbortslowackConsumerStrategy设置,但这会导致这些消费者经常流产,听起来并不是这种设置的重点。

有人遇到了相同的问题吗?是否有任何方法可以设置具有高预取的绩效的缓存消费者,但不会遇到麻烦?

dmlc连接工厂中的消费者没有真正的好处,因为无论如何消费者通常都是长寿的。它在使用动态缩放(可调节并发)时会引起问题,因为消费者被缓存,并且任何预取的消息都会粘在缓存中。关闭CF中的消费者缓存。

有关更完整的描述,请参见此答案。

最新更新