队列消耗时ActiveMQ“冻结”消息

时间:2015-07-06 13:11:41

标签: activemq

ServiceMix的Karaf OSGi中的ActiveMQ:5.10.2

KahaDB持久性。

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

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

与ActiveMQ的两个客户端连接。一个用于制作人会话,一个用于消费者会话。

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

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

一切顺利,但是: 如果我将消费者数量减少到1(或2或3,我不知道阈值在哪里),以便来自1个队列的消息正在消耗,而来自其他队列的消息正在存储。 虽然有些时间过去了,但我看到了这张照片:

  1. 那个消费者停止接收消息。他认为没有更多的消息。
  2. 从activemqweb我可以看到该消费队列的消息计数是> 0
  3. 来自activemqweb我在该消费队列中的消息浏览器中看不到任何消息。
  4. 我可以在消息浏览器中看到来自其他队列的消息。
  5. 如果我启动其他消费者(或重启activemq)来使用来自不同队列的消息,我会看到:

    1. 我开始在第一个队列消息浏览器中看到消息(之前发送但在“冻结”之后没有看到的消息)。
    2. 第一个队列继续消费
    3. 第二个队列开始消费。
    4. “冻结”可能会在一段时间内再次发生,并开始消耗另一个队列将再次有用。
    5. 如果我启动所有消费者,我看不到“消息冻结”。 如果只是在“冻结”队列上停止并启动消费者,则没有任何反应。需要在“解冻队列”上完成“解冻”“冻结队列”。

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

      它有什么用?

      谢谢。

1 个答案:

答案 0 :(得分:0)

Oups。我发现它是什么。

只是可用内存超出。

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

当存储和未消费的消息大小被关闭到顶部时,我会得到这些行为。