使用ActiveMQ的队列上的奇怪行为

时间:2017-11-10 13:26:17

标签: activemq

我们已经在生产中使用AMQ已经有一段时间了,我们注意到我们队列中的一个奇怪的行为。

情况如下:

  • 我们进行点击流量流量,因此当我们识别出用户时,他的所有活动都被"分组"通过JMSXGroupID属性(这是一个UUID,在我们的例子中,我们每小时可以有数百万个)所以我们有一些订单来消耗同一个用户的事件,以防它们爆发
  • 我们使用KahaDB以下配置:

    <mKahaDB directory="${activemq.data}/mkahadb">
    <filteredPersistenceAdapters>
        <filteredKahaDB perDestination="true">
            <persistenceAdapter>
                <kahaDB checkForCorruptJournalFiles="true" journalDiskSyncStrategy="PERIODIC" journalDiskSyncInterval="5000" preallocationStrategy="zeros" concurrentStoreAndDispatchQueues="false" />
            </persistenceAdapter>
        </filteredKahaDB>
    </filteredPersistenceAdapters>
    

  • 代理处于一个相当强大的EC2实例中,但它似乎没有达到任何限制,既没有文件限制,也没有IOPS,也没有CPU限制

  • 此目标的目标策略使用,非常类似于对JMSXGroupID使用相同分组的许多其他目标:

    <policyEntry queue="suchDestination>" producerFlowControl="false" memoryLimit="256mb" maxPageSize="5000" maxBrowsePageSize="2000"> 
    <messageGroupMapFactory>
        <simpleMessageGroupMapFactory/>
    </messageGroupMapFactory>
    <deadLetterStrategy>
        <individualDeadLetterStrategy queuePrefix="DLQ." useQueueForQueueMessages="true" />
    </deadLetterStrategy>
    

  • 与其他目的地相比,消费者消费消息的速度相当慢(每封邮件约50-100毫秒 其他目的地的其他消费者 - 每条消息大约10-30ms)

  • 然而,似乎我们最终处于消费者没有按照我们期望他们的速度消费的情况,并且似乎在等待某些东西,而在消息上有大量的消息该目的地的远程经纪人。消费者似乎既不是CPU,也不是IO绑定,也不是网络流量限制。

  • 一个症状是,如果我们将该队列拆分为两个队列,并且我们在相同数量的节点中附加相同数量的消费者来使用它,那么事情就会变得更好。此外,如果该队列存在巨大的工作负载,如果我们只是将它重命名为生产者上的suchQueue2,并在其上分配一些消费者,那么这些消费者(#一段时间)比#34; old&#上的消费者快得多# 34; suchQueue。

  • 队列没有&#34;未分组的消息&#34;,其上的所有消息都具有JMSXGroupID属性且属于同一类型。

  • 增加消费者数量或降低消费者数量似乎没什么影响

  • 重新启动消费者应用程序似乎一旦队列变得“消耗慢”就会产生影响。

有没有人经历过这个:

简而言之:

经纪人正在等待相当长时间的消费者,他们似乎一直都是自由而且不忙。

0 个答案:

没有答案