## RocketMQ仪表盘消息轨迹跟踪如何开启

572 阅读3分钟

业务上我们发送一个MQ消息,可能出现一些问题,例如,消费者没有收到消息,消费者消费失败后没有重试等等问题。从我们业务日志上排查问题往往很难,也可能跟网络有关系,RocketMQ提供了仪表盘,包含消息轨迹跟踪等功能。但是默认是关闭这个功能的。如何打开呢?

1、消息轨迹跟踪能够查看到什么信息?

一个消息A什么时候从那个Producer发送出来的? 他在Broker端在那个topic中存储及消息类型等内容 消费层面,被那个Consumer在什么时候消费

image-20231009173835489.png

2、操作

2.1 首先需要在broker的配置文件里面开启traceTopicEnable=true这个选项,此时开始消息轨迹跟踪的功能。

2.2 开启后重启broker的时候会自动创建一个内部的Topic,就是RMQ_SYS_TRACE_TOPIC(也可以在broker配置文件中自定义这个topic),这个topic用来存储所有消息轨迹跟踪的数据。

2.3 做好上述配置后,在发送消息的时候开启消息轨迹

  • 此时创建Producer的时候要用如下的方式,下面构造函数中的第二个参数,就是enableMsgTrace参数,他设置为true,就是说可以对消息开启轨迹追踪

在这里插入图片描述

  • 如果使用的spring配置文件方式,在生产端配置开启消息跟踪,enable-msg-trace: true

image-20231009174742732.png

2.4 订阅消息同理,也需要开启消息轨迹跟踪

  • 创建DefaultMQPushConsumer对象的时候设置enableMsgTracetrue

image-20231009175537645.png

  • 如果使用的spring配置文件方式,全局生效,在消费配置开启消息跟踪,enable-msg-trace: true,

image-20231009175735100.png

  • 或者针对某个消费者设置enable-msg-trace: true

image-20231009175710827.png

3、思考下消息收集的过程

Producer在发送消息的时候,就会上报这个消息的一些数据到内置的RMQ_SYS_TRACE_TOPIC里去此时会上报如下的一些数据:`Producer的信息、发送消息的时间、消息是否发送成功、发送消息的耗时。

接着消息到Broker端之后,Broker端也会记录消息的轨迹数据,包括如下:消息存储的Topic、消息存储的位置、消息的key、消息的tags。

然后消息被消费到Consumer端之后,他也会上报一些轨迹数据到内置的RMQ_SYS_TRACE_TOPIC里去,包括如下一些东西:Consumer的信息、投递消息的时间、这是第几轮投递消息、消息消费是否成功、消费这条消息的耗时。

4、开启消息轨迹跟踪可能影响

RocketMQ消息跟踪功能记录消息在RocketMQ中的传递处理过程,肯定会又额外的性能开销,但绝大多数不会有明细的影响。

4.1 存储开销,消息跟踪信息存储在broker中,增加存储开销,一般RocketMq存储引擎能够轻松应对(集群)。

4.2 网络开销:消息跟踪信息通常会在消息传递过程中通过网络传输

4.3 资源开销:消息跟踪需要额外的系统资源,例如内存和CPU,这个开销也是可控的,

总的来说,开启消息跟踪不会对MQ服务有明细的不行影响,尤其在现在硬件和网络环境下,通过集群或其他方式能够抵消这个影响。

5、遇到的问题

有时候消息轨迹跟踪里面没有消费者数据,可能这个消息还未被消费,在仪表盘消费栏看看消息是否被消费过;

或者查看我们项目中依赖的rocketMq版本,尽量升级到最新的版本测试,

image-20231009180926134.png

在yml文件配置的消费端开启消息跟踪,没有生效,(挠头)。 使用@RocketMQMessageListener注解设置enable-msg-trace: true 消费端可以上报轨迹 只能是消息通过@RocketMQMessageListener注解消费消息,没有读取yml配置 每个消费监听器都设置

rocketmq:
  consumer:
    #没有效果,后续在跟
    enable-msg-trace: true