当消息计数 < 1000 时,ActiveMQ Artemis 浏览器清空消息

ActiveMQ Artemis browser empty messages when message count < 1000

我观察到一种我无法解释的奇怪行为。我的应用程序使用 Spring Boot 来访问 ActiveMQ Artemis 并生成和使用工作正常的消息。

但是,当我尝试在我的应用程序正在侦听的队列上使用 browse 时,如果消息计数为大约低于 1000。对于更多的消息计数,或者当我停止队列侦听器时,它就可以工作。 为什么会这样?

我的直觉是这是由客户端上的消息缓冲区引起的。作为性能优化,客户端通常会缓冲来自代理的大量消息,因为执行网络 round-trip 以获取每条消息可能非常慢。从代理的角度来看,处于此状态的消息是 "in delivery"(即它们已发送给客户端但尚未被客户端确认)。处于此状态的消息不可浏览。一旦队列中有足够的消息超过客户端的缓冲区大小(在您的情况下似乎约为 1,000),您将开始使用浏览器查看这些消息。如果您不想为您的客户端进行这种性能优化,您可以通过在客户端的 URL 上设置 consumerWindowSize=0 来禁用它(例如 tcp://127.0.0.1?consumerWindowSize=0)。