ActiveMQ中消息的消息消费延迟大

Large delays in message consumption of messages in ActiveMQ

我们有一个经纪人网络,由位于不同服务器上的三个经纪人组成。 网络连接器配置如下:

    <networkConnectors>
      <networkConnector uri="static:(ssl://broker2:61616,ssl://broker3:61616)" networkTTL="5"/>
    </networkConnectors>

整体设置如下图所示。

在实践中,我们有时会看到特定客户端的消息消费有很大的延迟。在这种情况下,消息在最终被使用之前会被多次转发给其他代理。直到现在,我们还无法找出可能是什么原因造成的。

消费者不是很忙。它们是使用 Spring JMS 库实现的。每个代理的最小消费者数量为 3 个,但这可以根据需要自动扩展。

我们怀疑只有特定客户端受到影响的原因可能与我们使用 JMSGroupId 来获取消息处理方式的一些顺序这一事实有关。但是,我们没有确凿的证据证明这一点。而且它仍然无法解释为什么会发生这种情况。

我们还考虑将以下参数添加到网络连接器,因为我们认为这可能会改善行为:

dynamicOnly="true"
decreaseNetworkConsumerPriority="true"
suppressDuplicateQueueSubscriptions="true"

然而,这样做也很可怕,因为我们觉得我们不完全了解现在发生的事情,因此无法真正确定这些设置将对行为产生的影响。

We suspect that the reason that only a specific client is impacted, might have something to do with the fact that we use the JMSGroupId to get some ordering in how the messages are handled.

宾果。

如果您确保串行消息处理,则缩放使用者是无用的。摆脱这种行为的最佳方法是设置一个专用的 JMS 队列,每个组只有一个消费者,否则当队列中的多个后续消息属于同一组时,您将试验消费者争用。