ActiveMQ如何监控应用的消息延迟?

ActiveMQ提供了多种监控消息延迟的方法:

  1. 使用管理控制台
    在管理控制台可以查看Queue的averageEnqueueTime和averageDequeueTime的信息。

这两个值分别反映了:

  • 消息入队时延平均值
  • 消息出队(被消费)时延平均值

可以通过比较两个值来大致判断消息处理的延迟。

  1. 通过JMX看MessageDelayStatistics
    ActiveMQ提供的MessageDelayStatisticsMBean包含:
  • MinimumDelay:消息延迟的最小值
  • MaximumDelay:最大值
  • MeanDelay:平均延迟

可以通过JMX查看这些信息。

  1. 在Broker端记录延迟
    我们可以在activemq.xml配置:
<policyEntry queue=">" >
   <delayedDeliveryPolicy>
      <mostlyAFairDispatching>true</mostlyAFairDispatching>
   </delayedDeliveryPolicy>
   ... 

这样Broker会记录每条消息的延迟情况。

  1. 在代码中自定义监控
    我们可以自定义MessageListener,同时记录消息接收和发送时间:
long start = System.currentTimeMillis();
messageListener = message -> {
  long end = System.currentTimeMillis();
  long delay = end - start;
  // 处理消息
  ... 
}

通过比较 starttime 和 endtime,就可以获取消息处理的延迟时间。

以上几种方法可以较为全面的监控ActiveMQ应用的消息延迟情况。可以结合使用,既可以监控延迟平均值,也可以监控每个消息的具体延迟。