ActiveMQ提供了多种监控消息延迟的方法:
- 使用管理控制台
在管理控制台可以查看Queue的averageEnqueueTime和averageDequeueTime的信息。
这两个值分别反映了:
- 消息入队时延平均值
- 消息出队(被消费)时延平均值
可以通过比较两个值来大致判断消息处理的延迟。
- 通过JMX看MessageDelayStatistics
ActiveMQ提供的MessageDelayStatisticsMBean包含:
- MinimumDelay:消息延迟的最小值
- MaximumDelay:最大值
- MeanDelay:平均延迟
可以通过JMX查看这些信息。
- 在Broker端记录延迟
我们可以在activemq.xml
配置:
<policyEntry queue=">" >
<delayedDeliveryPolicy>
<mostlyAFairDispatching>true</mostlyAFairDispatching>
</delayedDeliveryPolicy>
...
这样Broker会记录每条消息的延迟情况。
- 在代码中自定义监控
我们可以自定义MessageListener,同时记录消息接收和发送时间:
long start = System.currentTimeMillis();
messageListener = message -> {
long end = System.currentTimeMillis();
long delay = end - start;
// 处理消息
...
}
通过比较 starttime 和 endtime,就可以获取消息处理的延迟时间。
以上几种方法可以较为全面的监控ActiveMQ应用的消息延迟情况。可以结合使用,既可以监控延迟平均值,也可以监控每个消息的具体延迟。