【问题标题】:ActiveMQ "freeze" message on queue consumingActiveMQ“冻结”队列消费消息
【发布时间】:2015-09-23 15:46:35
【问题描述】:

ActiveMQ:ServiceMix 的 Karaf OSGi 中的 5.10.2

KahaDB 持久性。

默认代理设置。 连接中的默认设置(tcp://x.x.x.x:61616)

activemq.xml 中预定义了 16 个队列。

到 ActiveMQ 的两个客户端连接。一个用于生产者会话,一个用于消费者会话。

生产者向所有队列发送消息。

16 个消费者会话消费消息。

一切正常,但是: 如果我将消费者数量减少到 1 个(或 2 个或 3 个,我不知道阈值在哪里),那么来自 1 个队列的消息正在消耗,而来自另一个队列的消息正在存储。 过了一段时间,我看到了这张照片:

  1. 那 1 个消费者停止接收消息。他认为没有更多消息了。
  2. 从 activemqweb 我可以看到该消费队列上的消息计数 > 0
  3. 从 activemqweb 我看不到消息浏览器中该消费队列中的任何消息。
  4. 我可以在消息浏览器中看到来自其他队列的消息。

如果我启动其他消费者(或重新启动 activemq)来使用来自不同队列的消息,我会看到:

  1. 我开始在第一个队列消息浏览器中看到消息(那些之前发送但在“冻结”之后没有看到的消息)。
  2. 第一个队列继续消费
  3. 第二个队列开始消耗。
  4. “冻结”可能会在一段时间内再次发生,开始消耗另一个队列将再次有所帮助。

如果我启动所有消费者,我看不到“消息冻结”。 如果只是在“冻结”队列中停止并启动消费者,则不会发生任何事情。需要对“解冻队列”进行“解冻”“冻结队列”。

如果没有活跃的生产者,只有消费者,也会发生这种情况。

会是什么?

谢谢。

【问题讨论】:

  • 如果我只有一个队列并从中产生和消费消息,我也看不到任何冻结。因此,只有当有多个消息队列且并非所有队列都在消费时才会发生这种情况......
  • 查看队列的负载平衡。它看起来像每个消费者都安排到内部队列中的消息

标签: activemq


【解决方案1】:

Oups。我已经找到了。

只是超出了可用内存。

我没有设置 -Xms 和 -Xmx,所以它运行时只有 512mb 的最大堆。

当存储和未使用的消息大小接近顶部时,我会得到这些行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 2014-06-27
    • 2017-11-06
    • 2015-03-17
    • 2020-12-01
    • 2014-01-22
    • 2013-08-01
    相关资源
    最近更新 更多