在分布式应用中,云消息队列 RocketMQ 版作为全链路中异步解耦的关键服务,提供的消息轨迹数据可有效将业务上下游信息串联起来,帮助您更好地排查异常信息,定位问题。本文介绍消息轨迹的使用场景、云消息队列 RocketMQ 版定义的轨迹参数以及如何查看消息轨迹。
使用场景
云消息队列 RocketMQ 版将消息收发流程中的关键数据定义为轨迹参数,并支持可视化查询,通过查看轨迹信息可快速获取当前业务处理的状态,帮助您快速定位异常问题。
消息轨迹的典型应用场景如下:
-
场景一:查看某条消息是否发送成功或是否消费成功。
-
场景二:查看定时/延时消息是否已定时结束。
-
场景三:查看事务消息是否已提交或回滚。
-
场景四:查看生产者、消费者身份信息和机器信息,进一步排查问题原因。
轨迹参数说明
云消息队列 RocketMQ 版提供的轨迹参数如下:
|
属性分类 |
轨迹参数 |
说明 |
|
生产者 |
生产者信息 |
生产者发送消息时使用的RocketMQ账号或Access Key ID。 |
|
主机名 |
生产者客户端所在机器的主机名称。 |
|
|
发送时间 |
生产者发送消息的起始时间。 |
|
|
到达Server时间 |
消息到达并存储到云消息队列 RocketMQ 版服务端的时间。 |
|
|
发送结果 |
消息发送的结果。取值如下:
|
|
|
消息基础信息 |
消息类型 |
|
|
消息ID |
消息的全局唯一标识,由云消息队列 RocketMQ 版系统自动生成。 |
|
|
Topic |
消息所属的主题名称。 |
|
|
消息Keys |
MessageKey,消息的业务标识,由消息生产者设置,唯一标识某个业务逻辑。 |
|
|
消息Tag |
消息标签,用于区分指定主题下的消费分类。 |
|
|
顺序消息 |
MessageGroup |
顺序消息中,消息所属的MessageGroup,由生产者设置。同一MessageGroup的消息将遵循先进先出的顺序关系进行处理。 |
|
事务消息 |
Check回调时间 |
半事务消息检查事务状态的回调时间。 |
|
提交时间 |
事务消息被服务端提交给消费者消费的时间。 |
|
|
回滚时间 |
事务消息回滚的时间。 |
|
|
定时消息 |
预设定时时间 |
定时消息的定时时间。 |
|
消费者 |
本次消费结果 |
消息某次消费的消费结果。取值如下:
|
|
消费者信息 |
消费者订阅消息时使用的RocketMQ账号或AccessKey ID。 |
|
|
主机名 |
消费者客户端所在机器的主机名。 |
|
|
是否顺序投递 |
消费者所属的消费者分组是否开启顺序消费。 |
|
|
投递时间 |
云消息队列 RocketMQ 版服务端将消息投递给消费者的时间。 |
|
|
应答时间 |
云消息队列 RocketMQ 版收到消费者返回的消费结果的时间。 |
|
|
invisibleDuration |
SimpleConsumer传入的消息不可见时间。更多信息,请参见SimpleConsumer消费重试策略。 |
|
|
修改不可见时间 |
SimpleConsumer调用ChangeInvisibleDuration接口的时间。 |
|
|
进死信时间 |
消息消费失败被投递至死信队列的时间。 |
使用限制
RocketMQ 4.x/3.x版本的SDK客户端默认不开启消息轨迹功能,您需要在消息收发代码中开启消息轨迹功能,才能在控制台查询到消息的轨迹信息。具体配置如下:
-
生产者
producer.setAccessChannel(AccessChannel.CLOUD); -
消费者
consumer.setAccessChannel(AccessChannel.CLOUD);
计费说明
-
包年包月和按量付费实例可免费使用消息轨迹功能且默认支持消息轨迹。
-
Serverless实例可选择手动开启或关闭消息轨迹功能,具体操作,请参见开启/关闭Serverless实例的消息轨迹功能。
若开启消息轨迹,则Serverless实例按照实际产生的消息轨迹条数计算消息轨迹费用,具体计费规则,请参见消息轨迹费用。
消息轨迹存储时长
-
包年包月和按量付费实例的消息轨迹保存时间为3天。
-
Serverless实例的消息轨迹保存时间为14天。
消息轨迹查询方式
云消息队列 RocketMQ 版支持以下查询方式:
-
按Message ID查询:该方式属于精确查询,速度快、精确匹配,推荐使用。
-
按Message Key查询:该方式属于模糊查询,最多查询1000条轨迹。仅适用于您没有记录Message ID但是设置了Message Key,同时Message Key具有区分度的情况。
-
按Topic查询:该方式属于范围查询,适用于没有上述Message ID和Message Key,而且消息量比较小的场景。因为时间范围内消息很多,且不具备区分度,所以不推荐使用。
开启/关闭Serverless实例的消息轨迹功能
-
关闭消息轨迹功能,Serverless实例的消息轨迹数据将不支持存储和查询,且控制台不显示消息轨迹的查询入口。
-
开启消息轨迹功能,Serverless实例将产生消息轨迹费用,具体计费项,请参见消息轨迹费用。
登录云消息队列 RocketMQ 版控制台,在左侧导航栏单击实例列表。
在顶部菜单栏选择地域,如华东1(杭州),然后在实例列表中,单击目标实例名称。
-
在实例详情页面单击基本信息页签,在消息轨迹参数后单击开启或关闭。
-
在弹出的对话框中单击确定。
查询消息轨迹
登录云消息队列 RocketMQ 版控制台,在左侧导航栏单击实例列表。
在顶部菜单栏选择地域,如华东1(杭州),然后在实例列表中,单击目标实例名称。
-
在左侧导航栏单击消息轨迹,然后在消息轨迹页面选择任一查询方式并输入相应的条件,最后单击查询。
查询结果以表格形式展示,包含 Message ID、Topic、Tag、Message Key、创建时间等列。在操作列单击消息轨迹可查看对应消息的轨迹详情。
-
在查询的列表中,单击目标消息操作列的消息轨迹。在弹出的面板中,可以查询消息的详细信息。
消息轨迹面板展示消息从生产到消费的完整链路,分为三个区域:生产者区域显示消息来源、生产者信息、主机名、发送时间、到达Server时间及发送结果;MQ Server区域显示消息类型、消息ID、Topic、消息Keys和Tag;消费者区域显示Group ID、消费统计(全部数量与消费失败数量)及各消费组的消费状态。
-
若消息成功消费,单击消费者卡片中的Group ID,可以查询消息消费的详细信息。单击生成图片,可以生成当前消息的轨迹详情图片。
消息轨迹查询结果由三个面板组成:生产者面板显示发送时间、到达Server时间和发送结果;MQ Server面板显示消息类型、消息ID、Topic和Tag;消费者组面板(如test_group1)展开后显示投递次数、投递结果、顺序投递状态、投递时间和应答时间。
相关文档
消息轨迹的相关操作也可以通过调用API完成: