【问题标题】:Large delays in message consumption of messages in ActiveMQActiveMQ中消息的消息消费延迟大
【发布时间】:2020-10-05 17:33:39
【问题描述】:

我们的代理网络由不同服务器上的三个代理组成。 网络连接器配置如下:

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

整体设置如下图所示。

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

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

我们怀疑只有特定客户端受到影响的原因可能与我们使用 JMSGroupId 对消息处理方式进行排序这一事实有关。但是,我们没有确切的证据证明这一点。它仍然无法解释为什么会发生。

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

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

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

【问题讨论】:

    标签: java activemq spring-jms


    【解决方案1】:

    我们怀疑只有特定客户受到影响的原因, 可能与我们使用 JMSGroupId 来 了解如何处理消息的顺序。

    宾果游戏。

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

    JMS topology (Queue with multiple consumers) and message groups

    【讨论】:

    • 感谢您的确认。你对我提到的房产有什么看法?一些博客文章说应该添加它们以改善经纪人网络的行为。官方文档不是很清楚(在这一点上也不是很清楚)。
    • 您的问题根本与网络配置无关,而是与串行处理的 JMS 实现有关。无论如何,我想知道您为什么要使用组。你真的需要确保串行处理吗?无论如何,消息都以自然的先进先出顺序出队,组只是为了减轻消息处理顺序中的多个消费者并行化风险(一个消费者可能比另一个消费者消费得更快,因此首先提交稍后开始的操作),代价是失去所有并行化能力.
    • 谢谢。我认为网络配置不是问题,但是我们想知道这些参数是否可能是有益的。无论如何,不​​,我们不需要订购。我们以为我们做到了,但我们已经意识到事实并非如此。所以我们可以取消消息组。
    • 我对此不称职,抱歉 :) 试试看
    猜你喜欢
    • 1970-01-01
    • 2018-06-08
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多