ActiveMQ提供了多种方式监控消息的延迟和高延迟情况:
一、管理控制台
可以在控制台页面查看Queue的averageEnqueueTime
以及averageDequeueTime
。
这两个值分别反映消息入队和出队(被消费)的平均延迟。
比较这两个值就可以判定是否存在高延迟。
二、JMX MBean
ActiveMQ提供MessageDelayStatisticsMBean
可以获取:
- MinimumDelay:消息延迟的最小值
- MaximumDelay:最大值
- MeanDelay:平均延迟
如果 MaximumDelay 高于预期,说明存在高延迟情况。
三、生产者监控
在生产者内部,记录消息发送时刻和添加时间戳:
long startTime = System.currentTimeMillis();
producer.send(message);
message.setLongProperty("sendTime", startTime);
// 添加时间戳
消费者记录消费时刻,与发送时刻比较测量延迟。
四、Broker 监控
在activemq.xml
配置 broker 端消息统计:
<policyEntry queue=">" >
<statsProcessingEnable>true</statsProcessingEnable>
</policyEntry>
Broker将自动收集消息入队和出队时刻,计算延迟。
五、消息回溯
对历史消息进行回溯,分析具体的延迟消息。
定位高延迟的症结。
总的来说,ActiveMQ主要通过以下方法监控消息延迟和高延迟情况:
- 查看管理控制台的延迟统计数据
- 获取JMX MBean提供的延迟详细指标
- 在生产者和消费者中自定义监控代码
- 开启 Broker 端的消息统计
- 对延迟严重的消息进行回溯分析
综合使用上述方法,可以较为全面和准确地监控ActiveMQ消息的延迟情况。