当一条消息从生产者发送到 TDMQ RocketMQ 版服务端,再由消费者进行消费,TDMQ RocketMQ 版会完整记录这条消息中间的流转过程,并以消息轨迹的形式呈现在控制台。
消息轨迹记录了消息从生产端到 TDMQ RocketMQ 版服务端,最后到消费端的整个过程,包括各阶段的时间(精确到微秒)、执行结果、生产者 IP、消费者 IP 等。
如果您使用的是 5.0 及以上版本的 gRPC 客户端进行消息的生产和消费,则无需在客户端另行开启轨迹开关。
如果您使用的是 4.x 版本的客户端,或者 5.0 以上版本的 Remoting 客户端,则需要在客户端来设置开启消息轨迹功能,具体设置示例如下:
更多关于客户端的说明请参见 社区客户端说明。
生产者设置DefaultMQProducer producer = new DefaultMQProducer(namespace, groupName, // ACL权限 new AclClientRPCHook(new SessionCredentials(AK, SK)), true, null);Push 消费者设置
// 实例化消费者 DefaultMQPushConsumer pushConsumer = new DefaultMQPushConsumer(NAMESPACE,groupName, new AclClientRPCHook(new SessionCredentials(AK, SK)), new AllocateMessageQueueAveragely(), true, null);Pull 消费者设置
DefaultLitePullConsumer pullConsumer = new DefaultLitePullConsumer(NAMESPACE,groupName, new AclClientRPCHook(new SessionCredentials(AK, SK))); // 设置NameServer的地址 pullConsumer.setNamesrvAddr(NAMESERVER); pullConsumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET); pullConsumer.setAutoCommit(false); pullConsumer.setEnableMsgTrace(true); pullConsumer.setCustomizedTraceTopic(null);Spring Boot Starter 接入(2.2.2版本及以上运行)
package com.lazycece.sbac.rocketmq.messagemodel; import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.spring.annotation.MessageModel; import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; import org.apache.rocketmq.spring.core.RocketMQListener; import org.springframework.stereotype.Component; /** * @author lazycece * @date 2019/8/21 */ @Slf4j @Component public class MessageModelConsumer { @Component @RocketMQMessageListener( topic = "topic-message-model", consumerGroup = "message-model-consumer-group", enableMsgTrace = true, messageModel = MessageModel.CLUSTERING) public class ConsumerOne implements RocketMQListener<String> { @Override public void onMessage(String message) { log.info("ConsumerOne: {}", message); } } }
操作场景
当您需要排查以下问题时,就可以使用 TDMQ RocketMQ 版控制台的消息查询功能,按照时间维度或者根据日志中查到的消息 ID 、消息 Key 或者 消息 Tag,来查看具体某条消息的消息内容、消息参数和消息轨迹。
- 查看某条消息的具体内容,具体参数。
- 查看消息由哪个生产 IP 发送,是否发送成功,消息到服务端的具体时间。
- 查看消息是否已持久化。
- 查看消费由哪些消费者消费了,是否消费成功,消息确认消费的具体时间。
- 需要做分布式系统的性能分析,查看 MQ 对相关消息处理的时延。
查询消息
- 登录 RocketMQ 控制台,在左侧导航栏单击消息查询 > 综合查询。
- 在综合查询页面,选择好地域后根据页面提示输入查询条件。
- 集群:选择需要查询的 Topic 所在的集群。
- Topic:选择需要查询的 Topic。
- 时间范围:选择需要查询的时间范围,支持近100条(默认按时间顺序展示最近的 100 条消息),近30分钟,近1小时,近6小时,近24小时,近3天和自定义时间范围。
- 查询方式:消息查询功能支持以下查询方式。
- **查询全部:**该方式适合查询全部消息。
- **按消息 ID 查询:**该方式属于精确查询、速度快、精确匹配。
- **按消息 Key 查询:**该方式属于模糊查询,适用于您没有记录消息 ID 但是设置了消息 Key 的场景。查询结果最多展示64条,可以通过细化查询时间来精确定位需要查询的消息。
- **按消息 Tag 查询:**该方式属于模糊查询,适用于您没有记录消息 ID 但是设置了消息 Tag 的场景。查询结果最多展示64条,可以通过细化查询时间来精确定位需要查询的消息。
- 单击查询,下方列表会展示所有查询到的结果并分页展示。

- 找到您希望查看内容或参数的消息,单击操作列的查看详情,即可查看消息的基本信息、内容(消息体)、详情参数和消费状态。
在消费状态模块,您可以查看到消费该消息的 Group 以及消费状态,同时还可以在操作栏进行如下操作:- 重新发送:将消息重新发送到指定的客户端,如消息已消费成功,重新发送该消息可能导致消费重复。
- 异常诊断:若消费异常,可以查看异常诊断信息。

- 单击操作列的查看消息轨迹,或者在详情页单击 Tab 栏的消息轨迹,即可查看该消息的消息轨迹(详细说明请参见 消息轨迹与说明)。

消费验证
在查询到某条消息后,您可以单击操作列的消费验证将该条消息发送到指定的客户端来验证该消息。该功能可能会导致消息重复。
说明:
- 消费验证功能仅用于验证客户端的消费逻辑是否正常,并不会影响正常的收消息流程,因此消息的消费状态等信息在消费验证后并不会改变。
- 消费验证功能目前暂不支持发送到 Python 和 C++ 客户端。

导出消息
在查询到某条消息后,您可以单击操作列的导出消息将该条消息的消息体,消息 Tag,消息 Key,消息生产时间和消费属性等信息。
您也可以勾选要导出的消息后,单击左上角的**批量导出,**实现批量导出勾选的消息。
下载消息
在消息详情页,您可以单击右上方的下载消息按钮,可以将单条消息的消息体和消息头保存到本地。


