消息轨迹是指一条消息从生产者发送到消息队列RocketMQ版服务端,再到消费者消费,整个过程中的各个相关节点的时间、状态等数据汇聚而成的完整链路信息。该轨迹可作为生产环境中排查问题强有力的数据支持。本文介绍消息轨迹的使用场景、查询步骤以及查询结果的参数说明。

消息轨迹数据

消息队列RocketMQ版系统中,一条消息的完整链路包含生产者、服务端、消费者三个角色,每个角色处理消息的过程中都会在轨迹链路中增加相关的信息,将这些信息汇聚即可获取任意消息当前的状态。

轨迹数据

使用说明

所有类型的消息正常发送后,即可根据消息的属性在消息队列RocketMQ版控制台上查询到消息的发送轨迹,但查询轨迹需要注意以下几点。

查询结果说明

由于消息轨迹采用的是异步链路,因此,不保证轨迹数据一定完整。当查询条件正确时,仍会有小概率查询不到结果。

支持查询的消息范围

由于消息在消息队列RocketMQ版中存储的时间默认为3天,即只能查询从当前查询时间算起3天内的消息轨迹。例如,当前时间是2021年06月10日15:09:48,那么能查询到的消息轨迹最早的时间点为2021年06月07日15:09:48。

消费状态对查询结果的影响

消息类型 查询说明
普通消息 没消费前显示尚未消费。消费后会展示投递和消费信息。
顺序消息 没消费前显示尚未消费。消费后会展示投递和消费信息。
定时和延时消息 如果当前系统时间没有到达指定消费的时间,轨迹可以查询到,但是消息查询不到。
事务消息 事务未提交之前,轨迹可以查询到,但是消息查询不到。

各语言SDK支持消息轨迹的版本

协议 语言 支持消息轨迹的版本 版本说明
TCP协议 Java 1.2.7.Final及以上版本 Java SDK版本说明
C/C++ 1.1.2及以上版本 C/C++ SDK版本说明
.NET 1.1.2及以上版本 .NET SDK版本说明
HTTP协议 Node.js 1.0.2及以上版本 HTTP协议SDK版本说明
其他多语言 1.0.1及以上版本

增强版消息轨迹使用条件

增强版消息轨迹功能指的是若您使用的实例及客户端SDK版本符合以下条件,您可在控制台查看更多的轨迹数据,包括消息消费环节的轨迹数据、定时和延时消息及事务消息的相关轨迹数据等,具体的轨迹参数说明,请参见消息轨迹参数说明

  • TCP协议Java SDK:
    • SDK版本:升级至2.x.x.Final版本
    • 实例所属地域:华东1(杭州)、华东2(上海)、华北1(青岛)、华北2(北京)、华北3(张家口)、华北5(呼和浩特)、华南1(深圳)、西南1(成都)、德国(法兰克福)和印度尼西亚(雅加达)。
  • TCP协议C++ SDK:
    • SDK版本:升级至3.x.x版本
    • 实例所属地域:所有地域均支持。

使用场景

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

消息轨迹场景

使用示例

假设您根据业务日志里的信息来诊断某条消息为何一直没有收到,则可以参照以下步骤,利用消息轨迹来排查问题。

  1. 收集疑似有问题的消息信息,包括Message ID、Message Key、Topic以及大概的发送时间。
  2. 进入消息队列RocketMQ版控制台,根据已有的信息创建查询任务,查询相关的消息的轨迹。
  3. 查看结果并分析判断原因。
    • 如果轨迹显示尚未消费,则可以前往Group 管理页面查看消费者状态,确认消息是否因堆积而导致尚未消费。具体步骤,请参见查看消费者状态
    • 如果发现已经消费,请根据消费端的信息,找到对应的客户端机器和时间,登录客户端机器查看相关日志。

前提条件

  • 请确保您的SDK版本支持消息轨迹功能,具体信息,请参见SDK版本支持情况
  • 您的消息已从生产者发送。

操作步骤

  1. 登录消息队列RocketMQ版控制台,在左侧导航栏单击实例列表
  2. 在顶部菜单栏选择地域,如华东1(杭州),然后在实例列表中,单击目标实例名称。
  3. 在左侧导航栏单击消息轨迹,然后在页面左上角单击创建查询任务
  4. 在弹出的创建消息轨迹查询任务面板中,按需选择查询条件并按提示输入信息,单击确定完成创建。
    重要 查询时,尽可能精确地设置时间范围,以便缩小查询范围,提高速度。
    查询方式
    消息轨迹查询功能支持三种查询方式,具体说明如下:
    • 按 Message ID 查询:该方式属于精确查询、速度快、精确匹配,推荐使用。
    • 按 Message Key 查询:该方式属于模糊查询,最多查询1000条轨迹。仅适用于您没有记录Message ID但是设置了Message Key,同时Message Key具有区分度的情况。
    • 按 Topic 查询:该方式属于范围查询,适用于没有上述Message ID和Message Key,而且消息量比较小的场景。因为时间范围内消息很多,且不具备区分度,所以不推荐使用。
    您创建查询任务后,即可在消息轨迹页面查看到刚创建的查询任务,若状态显示查询中,说明暂不能查看消息轨迹。
  5. 在任务列表中查看查询任务的状态,若状态查询中说明暂时不能查看消息轨迹,您需要在任务列表的右上角,单击refresh按钮,直到状态切换至查询完成
  6. 在消息轨迹任务列表中选择指定的查询任务,在其操作列单击查询结果
    查看到的轨迹的简要信息如下所示,主要是消息本身的属性以及发送和接收状态的信息。查询结果
  7. 查询结果页面,选择要查询的具体消息轨迹,在其操作列单击消息轨迹即可查看详细的消息轨迹信息。
    在TCP协议下按Message ID查询普通消息的轨迹示例如下。轨迹结果
  8. 在弹出的消息轨迹面板中,消费者区域展示订阅指定消息的消费者列表。单击消费者对应的Group ID,可查看指定消费者的详细信息。

消息轨迹参数说明

说明 以下参数仅当您的实例和客户端SDK版本符合增强版消息轨迹功能的条件时,才能在控制台查看到。具体条件,请参见本文使用说明
  • 生产者AccessKey
  • MQ Server到达Server预设DeliverAt实际AvailableAt提交/回滚时间
  • 消费者到达消费端等待处理耗时
表 1. 消息轨迹参数说明
参数归属 参数名称 说明
基础信息 Message ID 消息的全局唯一标识,由消息队列RocketMQ版系统自动生成。
Topic 消息所属的Topic名称。
消息 Key Message Key,消息的业务标识,由消息生产者设置,唯一标识某个业务逻辑。
消息 Tag 消息标签,用于区分某Topic下的消息分类。
生产者 AccessKey 您的阿里云账号或RAM用户的AccessKey ID,用于标识用户。当您通过SDK或API调用消息队列RocketMQ版资源时,需要使用AccessKey ID进行身份验证。
客户端 IP 消息生产者的客户端IP地址。
消息生产时间 消息从生产者发送时的客户端时间戳。
发送 RT 消息发送的毫秒级耗时时间。
发送状态 请参见消息状态说明中的发送状态
MQ Server 消息类型
说明 发送的消息为定时消息或延时消息时,消息类型都显示为定时消息
到达Server 消息到达消息队列RocketMQ版服务端的时间。
预设DeliverAt 定时消息的预计投递时间。
实际AvailableAt 消息可被投递到消费端的时间。
提交/回滚时间 事务消息提交或回滚的时间。
消费者 AccessKey 您的阿里云账号或RAM用户的AccessKey ID,用于标识用户。当您通过SDK或API调用消息队列RocketMQ版资源时,需要使用AccessKey ID进行身份验证。
到达消费端 消息到达消费者客户端的时间。
等待处理耗时 消息到达消费者客户端到消息开始消费时的耗时。
本次投递结果 某条消息投递给指定消费者可能要投递多次才会消费成功,该参数表示其中某一次投递的结果。更多信息,请参见消息状态说明中的消费状态
客户端 IP 消息消费者客户端的IP地址。
消息处理开始 消息开始消费时的客户端时间戳。
消息处理结束 消息完成消费时的客户端时间戳。
消息处理耗时 消息消费开始到结束的耗时。

在消息轨迹的任务列表页,单击某任务操作列的查询结果会显示消息的发送状态消费状态;具体的消息轨迹详情中的生产者消费者区域也会分别显示消息的发送和消费状态。这些状态的说明如下:

表 2. 消息状态说明
状态类型 状态参数
发送状态 发送成功
发送失败
消息定时中
事务未提交
事务回滚
消费状态 全部成功
部分成功
全部失败
尚未消费
消费结果未返回
消费成功
消费失败

更多操作

  • 删除单个任务

    如需删除某个查询任务,可在消息轨迹任务列表页找到需删除的任务,在其操作列单击更多,然后在下拉菜单中,选择删除

  • 批量删除任务

    如需批量删除多个查询任务,可在消息轨迹任务列表页中选中多条需要删除的任务,然后在列表上方单击批量删除任务

参考文档

如果对消息轨迹的查询结果有疑问,请参见常见问题中的为什么查询不到轨迹数据