gpt4 book ai didi

java - JMS 预取 + 缓存消费者 + 卡住消息

转载 作者:太空宇宙 更新时间:2023-11-04 06:06:59 25 4
gpt4 key购买 nike

我正在尝试让 JMS 消费者使用 ActiveMQ 服务器,但是我遇到了一些问题,该解决方案似乎只会导致更多问题。

我使用 Spring 的 DMLC(cacheLeve 设置为 CACHE_CONNECTION)和 CachingConnectionFactory(cachingConsumers 设置为 true)将 Activemq 自己的 ConnectionFactory 包装在部署在 Jboss AS 中的 Web 应用程序中。

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

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

看来无论你怎么走,都会遇到一些问题。作为最后的手段,我尝试了代理端的 AbortSlowAckConsumerStrategy 设置,但这会导致这些消费者经常被中止,听起来并不是这个设置的真正目的。

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

最佳答案

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

参见this answer以获得更完整的描述。

关于java - JMS 预取 + 缓存消费者 + 卡住消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30077309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com