队列消耗的 ActiveMQ "freeze" 消息

ActiveMQ "freeze" message on queue consuming

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. 我开始在第一个队列消息浏览器中看到消息(那些之前发送但在 "freeze" 之后没有看到的消息)。
  2. 第一个队列继续消费
  3. 第二个队列开始消费。
  4. "freeze" 可能会在一段时间后再次发生,开始使用另一个队列将再次提供帮助。

如果我启动所有消费者,我看不到 "message freeze"。 如果只是在 "frozen" 队列上停止并启动消费者,则什么也不会发生。需要在 "unfrozen queue" 到 "unfroze" "frozen queue".

上完成

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

它可以是什么?

谢谢。

哎呀。我找到了。

只是超出了可用内存。

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

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