队列消耗的 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 个消费者停止接收消息。他认为没有更多消息了。
- 从 activemqweb 我可以看到该消费队列上的消息计数 > 0
- 在 activemqweb 中,我在该消费队列中的消息浏览器中看不到任何消息。
- 我可以在消息浏览器中看到来自其他队列的消息。
如果我启动其他消费者(或重启 activemq)来消费来自不同队列的消息,我会看到:
- 我开始在第一个队列消息浏览器中看到消息(那些之前发送但在 "freeze" 之后没有看到的消息)。
- 第一个队列继续消费
- 第二个队列开始消费。
- "freeze" 可能会在一段时间后再次发生,开始使用另一个队列将再次提供帮助。
如果我启动所有消费者,我看不到 "message freeze"。
如果只是在 "frozen" 队列上停止并启动消费者,则什么也不会发生。需要在 "unfrozen queue" 到 "unfroze" "frozen queue".
上完成
如果没有活跃的生产者,只有消费者,也会发生这种情况。
它可以是什么?
谢谢。
哎呀。我找到了。
只是超出了可用内存。
我没有设置 -Xms 和 -Xmx,所以它 运行 只有 512mb 的最大堆。
当存储和未使用的消息大小接近顶部时,我得到这些行为。
ActiveMQ:ServiceMix 的 Karaf OSGi 中的 5.10.2
KahaDB 持久性。
默认代理设置。 连接中的默认设置(tcp://x.x.x.x:61616)
activemq.xml 中预定义了 16 个队列。
到 ActiveMQ 的两个客户端连接。一个用于生产者会话,一个用于消费者会话。
生产者向所有队列发送消息。
16 个消费者会话消费了消息。
一切正常,但是: 如果我将消费者数量减少到 1(或 2 或 3,我不知道阈值在哪里),那么来自 1 个队列的消息正在消耗,而来自另一个队列的消息正在存储。 一段时间过去了,我看到了这张图片:
- 那 1 个消费者停止接收消息。他认为没有更多消息了。
- 从 activemqweb 我可以看到该消费队列上的消息计数 > 0
- 在 activemqweb 中,我在该消费队列中的消息浏览器中看不到任何消息。
- 我可以在消息浏览器中看到来自其他队列的消息。
如果我启动其他消费者(或重启 activemq)来消费来自不同队列的消息,我会看到:
- 我开始在第一个队列消息浏览器中看到消息(那些之前发送但在 "freeze" 之后没有看到的消息)。
- 第一个队列继续消费
- 第二个队列开始消费。
- "freeze" 可能会在一段时间后再次发生,开始使用另一个队列将再次提供帮助。
如果我启动所有消费者,我看不到 "message freeze"。 如果只是在 "frozen" 队列上停止并启动消费者,则什么也不会发生。需要在 "unfrozen queue" 到 "unfroze" "frozen queue".
上完成如果没有活跃的生产者,只有消费者,也会发生这种情况。
它可以是什么?
谢谢。
哎呀。我找到了。
只是超出了可用内存。
我没有设置 -Xms 和 -Xmx,所以它 运行 只有 512mb 的最大堆。
当存储和未使用的消息大小接近顶部时,我得到这些行为。