最近更新时间: 2021-03-15 17:24:46
消息轨迹是指一条消息从生产者发送到消息队列 RocketMQ 服务端,再到消费者消费处理,整个过程中的各个相关节点的时间、状态等数据汇聚而成的完整链路信息。该轨迹可作为生产环境中排查问题强有力的数据支持。本文介绍消息轨迹的使用场景、查询步骤以及查询结果的参数说明。
消息队列 RocketMQ 系统中,一条消息的完整链路包含生产者、服务端、消费者三个角色,每个角色处理消息的过程中都会在轨迹链路中增加相关的信息,将这些信息汇聚即可获取任意消息当前的状态,涉及的数据如下图所示。

在生产环境的消息收发不符合预期时,可以通过 Message ID、Message Key 或 Topic 的时间范围查询相关的消息轨迹,找到消息的实际收发状态,帮助诊断问题。

假设您根据业务日志里的信息判断某条消息一直没有收到,则可以参照以下步骤,利用消息轨迹来排查问题。
消息轨迹的使用不会增加额外的接入成本。所有类型的消息正常发送后,即可根据消息的属性在消息队列 RocketMQ 控制台上查询到消息的发送轨迹,但消费轨迹需要注意以下几点:
| 消息类型 | 查询说明 |
|---|---|
| 普通消息 | 没消费前显示尚未消费。消费后会展示投递和消费信息。 |
| 顺序消息 | 没消费前显示尚未消费。消费后会展示投递和消费信息。 |
| 定时和延时消息 | 如果当前系统时间没有到达指定消费的时间,轨迹可以查询到,但是消息查询不到。 |
| 事务消息 | 事务未提交之前,轨迹可以查询到,但是消息查询不到。 |
1.登录消息队列 RocketMQ 控制台。单击消息轨迹,然后在消息轨迹的任务列表的右上角,单击创建查询任务按钮。 2.在弹出的创建查询任务对话框中,按需选择查询条件并按提示输入信息,单击确认完成创建。 注意:查询时,尽可能地精确设置时间范围,以便缩小查询范围,提高速度。 消息轨迹查询功能支持三种查询方式,具体说明如下:



消息轨迹链路图中的部分关键字段的解释如下。
| 链路部分 | 字段 | 说明 |
| 生产者 | 发送时间 | 消息从生产者发送时的客户端时间戳 |
| 发送耗时 | 生产者调用 Send 方法发送消息的毫秒耗时 | |
| Topic | Region | 消息存储的地域 |
| 消费者 | 耗时 | 消息推送到客户端之后执行 consumeMessage 方法的耗时 |
| 投递时间 | 客户端执行 consumeMessage 方法开始消费消息时的时间戳 |
在消息轨迹的任务列表页,单击某任务的 查询消息轨迹 图标会显示消息的发送状态和消费状态;而消息轨迹链路图中的生产者和消费者信息区域框也会分别显示消息的发送和消费状态。这些状态字段及其解释如下。
| 发送/消费状态 | 状态字段 | 说明 |
| 发送状态 | 发送成功 | 消息发送成功,服务端已经存储成功 |
| 发送失败 | 消息发送失败,服务端没有存储消息,需要重试 | |
| 消息定时中 | 该消息是定时或者延时消息,且尚未到达投递时间 | |
| 事务未提交 | 该消息是事务消息,且尚未提交状态 | |
| 事务回滚 | 该消息是事务消息,并且已经回滚 | |
| 消费状态 | 全部成功 | 该消息的所有投递都已成功消费 |
| 部分成功 | 该消息投递中存在消费失败的情况,或消费失败并重试成功的情况 | |
| 全部失败 | 该消息的所有投递都消费失败 | |
| 尚未消费 | 该消息尚未投递给任何消费方 | |
| 消费结果未返回 | 消费消息的方法尚未返回结果,或者被中断,导致本次消费结果未传回服务端 | |
| 消费成功 | 该消息已被成功消费 | |
| 消费失败 | 消费消息的方法主动返回失败标志,或者是消费方法抛异常 |
这篇文档有帮助吗?
正在加载反馈服务…