【发布时间】:2015-07-16 14:58:04
【问题描述】:
我正在尝试让 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 以 -1 超时调用 fetch 命令,这意味着它永远等待来自代理的消息当我们试图从 Jboss 取消部署它时,这反过来又导致 Web 应用程序挂起,因此它实际上不会被取消部署。
将预取更改为更高的值会导致消息卡在 activemq 中,如 http://tmielke.blogspot.se/2012/03/camel-jms-with-transactions-lessons.html 中的第 6 点所述,消费者从不消费他们预取的消息。
似乎无论你去哪里,你都会遇到一些问题。作为最后的手段,我在代理端尝试了 AbortSlowAckConsumerStrategy 设置,但这会导致这些消费者经常被中止,听起来这并不是这个设置的重点。
有人遇到过同样的问题吗?有没有什么方法可以设置缓存消费者的高预取性能而不会遇到问题?
【问题讨论】:
标签: java spring jms activemq spring-jms