【问题标题】:ActiveMQ Artemis browser empty messages when message count < 1000ActiveMQ Artemis 浏览器在消息数 < 1000 时清空消息
【发布时间】:2019-11-13 18:30:59
【问题描述】:

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

但是,当我尝试在队列上使用 browse 时,如果消息计数大约低于 1000,我的应用程序既不监听我的浏览调用,Artemis 管理控制台也无法枚举队列内容。对于更大的消息计数或当我停止队列侦听器时它会起作用。 为什么会这样?

【问题讨论】:

    标签: java spring-boot jms activemq-artemis


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回答,我没有更改默认的消费者窗口大小,所以这可能是该行为的原因。我将尝试使用此配置进行验证。您知道是否可以通过自定义属性过滤以某种方式计算“正在交付”消息?我的用例是监控队列中具有自定义属性集的消息数。
    • “正在传递”的消息在技术上不在队列中,因此您无法对它们进行任何过滤。但是,代理确实通过队列控件上的“deliveringCount”度量(可通过 JMX、Web 控制台、Jolokia 等获得)跟踪处于此状态的消息数量。此外,从 2.9.0 版本开始,该指标也被导出,这意味着您可以使用 Prometheus 等工具对其进行监控。
    猜你喜欢
    • 2021-09-02
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多