RocketMQ集群进行消息轨迹的追踪

如何在生产环境里查询一条消息的轨迹?
也就是说,对于一个消息,我想要知道,这个消息是什么时候从哪个Producer发送出来的?他在Broker端是进入到了哪个Topic里去的?他在消费者层面是被哪个Consumer什么时候消费出来的?
我们有时候对于一条消息的丢失,可能就想要了解到这样的一个消息轨迹,协助我们去进行线上问题的排查,所以此时就可以使用RocketMQ支持的消息轨迹功能,我们看下面的配置过程。
首先需要在broker的配置文件里开启traceTopicEnable=true这个选项,此时就会开启消息轨迹追踪的功能。
接着当我们开启了上述的选项之后,我们启动这个Broker的时候会自动创建出来一个内部的Topic,就是RMQ_SYS_TRACE_TOPIC,这个Topic就是用来存储所有的消息轨迹追踪的数据的。
接着做好上述这一切事情之后,我们需要在发送消息的时候开启消息轨迹,此时创建Producer的时候要用如下的方式,下面构造函数中的第二个参数,就是enableMsgTrace参数,他设置为true,就是说可以对消息开启轨迹追踪。
notion image
在订阅消息的时候,对于Consumer也是同理的,在构造函数的第二个参数设置为true,就是开启了消费时候的轨迹追踪。
其实大家可以思考一下,一旦当我们在Broker、Producer、Consumer都配置好了轨迹追踪之后,其实Producer在发送消息的时候,就会上报这个消息的一些数据到内置的RMQ_SYS_TRACE_TOPIC里去
此时会上报如下的一些数据:Producer的信息、发送消息的时间、消息是否发送成功、发送消息的耗时。接着消息到Broker端之后,Broker端也会记录消息的轨迹数据,包括如下:消息存储的Topic、消息存储的位置、消息的key、消息的tags。
然后消息被消费到Consumer端之后,他也会上报一些轨迹数据到内置的RMQ_SYS_TRACE_TOPIC里去,包括如下一些东西:Consumer的信息、投递消息的时间、这是第几轮投递消息、消息消费是否成功、消费这条消息的耗时。
接着如果我们想要查询消息轨迹,也很简单,在RocketMQ控制台里,在导航栏里就有一个消息轨迹,在里面可以创建查询任务,你可以根据messageId、message key或者Topic来查询,查询任务执行完毕之后,就可以看到消息轨迹的界面了。
在消息轨迹的界面里就会展示出来刚才上面说的Producer、Broker、Consumer上报的一些轨迹数据了。