我们是 ActiveMQ 设置,包含所有默认设置 . 它的经纪人网址就像 failover:(tcp://host1,tcp://host2,tcp://host3)?randomize=false

我们有2个消息队列, 生产环境 者发布持久性消息 .

消息通常具有稳定的流量,但是当市场开放时,消息突然持续近2个小时 . 此设置可以正常工作2-3天,然后消费者在处理消息时会变慢,我们会看到队列构建 .

消费者执行以下步骤:

  • 转换消息 .

  • 处理它

  • 添加到缓存和数据库 .

Prefetch size 是1000 .

以下是一些观察结果:

  • 消费者处理似乎不是问题,它总是会放慢速度 .

  • 看起来ActiveMQ经纪人在处理过程中变慢,但我没有证据

  • 我们观察到,在3台主机中,只有主机1和2处理大部分消息 .

关于如何解释这种缓慢的任何想法?

编辑:

进一步分析后发现,当消费者放缓时, Kahadb store [ Persistent 消息存储在代理中的 Kahadb ]达到100%存储 . 我可以理解,当存储达到100%时 生产环境 者被阻止但为什么消费者会放慢速度?是因为 Kahadb 在此期间可能会变慢并且提取相当于预取大小的消息需要更多?