2011-03-02 42 views
0

我有一个应用程序试图订阅很多不同的主题。ActiveMQ多订阅冻结应用程序

服务器端通过这些主题发布大量消息,一旦应用程序开始订阅,它就会收到很多消息,以至于应用程序甚至无法到达订阅功能的末尾。

看起来,OnMessage监听器被泛滥得如此之多(监听器是试图自订所有主题的类)。

因此,基本上有一种方法可以阻止邮件的接收,直到我订阅了所有主题为止?或者我错过了什么?

尝试划分所有主题的线程永远不会再获取处理器。 (如果服务器关闭,订阅没有问题,因为它没有收到任何东西,所以它不会丢失处理能力。)

在此先感谢您。

Paul。

回答

1

您可以尝试降低消费者的预取限制,这可以防止代理在创建消息时尝试分发如此多的消息,这有助于减少您看到的泛滥问题。

以下是一些可能有所帮助的文档。 http://activemq.apache.org/what-is-the-prefetch-limit-for.html

蒂姆 - www.fusesource.com

+0

我实际使用的主题而不是队列。我对跟踪所有消息不感兴趣。我甚至不关心我在订阅期间收到的消息。 – Paulo 2011-03-02 15:35:17

+0

比什是对的。您需要设置预取限制。 – timsabat 2011-03-02 15:57:05

+0

设置预取与跟踪消息无关,它只是调节代理将尝试在客户端每次订阅时尝试推迟的消息数量。如果您要创建大量订阅到高活动目标的应用程序,那么您应该设置较低的预取以减少客户端在订阅开始时接收到的流量,这会降低您看到的CPU过度开销。阅读我给你的链接文章,它解释得很好。 – 2011-03-02 18:51:58