You need to enable JavaScript to run this app.
导航

消息查询

最近更新时间2023.08.24 17:59:59

首次发布时间2022.01.18 11:41:51

成功接入消息队列 RocketMQ版之后,如果生产环境的消息收发不符合预期,可以通过消息查询功能查看服务端的详细消息内容,确认服务端的消息详情是否与生产端或消费端完全一致,排查消息生产或消费问题。

背景信息

推荐您在以下场景中使用消息查询功能:

  • 查看消息的具体内容,验证消息内容是否和生产端/消费端一致。
  • 下载指定消息内容,以供进一步的问题排查。

消息查询功能支持的查询方式如下:

查询方式

说明

按消息 ID 查询

查询指定 Topic 中、指定消息ID的消息详情。
按消息 ID 查询时,可以精确到某一条消息,适用于精确查询的情况。

按消息 Key 查询

查询指定 Topic 中、 包含指定 Key 的最近 16 条消息。
按消息 Key 查询时,会筛选出包含指定 Key 的消息列表中最近 16 条消息,适用于没有记录消息 ID 但是设置了消息 Key 的场景。

说明

建议消息生产者为每条消息设置具有业务区分度的 Key。Key 尽可能唯一,以确保相同的 Key 的消息数量尽量少,最大不超过 16 条,否则消息查询结果不完整。

按时间范围查询

查询指定 Topic 在指定时间范围内的消息列表。
按时间范围查询时,会筛选出符合条件的消息列表,适用于范围查询的情况。

注意事项

  • 消息在消息队列 RocketMQ版中的存储时间取决于创建实例时设置的消息保留时长,默认为 3 天。只能查询消息保留时长范围内的消息。
  • 存储空间不足时,后台会删除历史消息,可能有部分消息已被删除无法查询。

前提条件

  • 已经部署生产端和消费端服务、成功接入消息队列 RocketMQ版,并在消息保留时长以内有消息生产行为。
  • 如果通过消息 Key 查询,消息的生产者需要在发送消息时设置 Message Key 属性。
    设置 Message Key 的方法如下。

    说明

    • Key 尽可能唯一,以确保相同的 Key 的消息数量尽量少,最大不超过 16 条,否则消息查询结果不完整。
    • 消息 Key 应为英文、数字等可见字符,否则查询结果可能不符合预期。
    Message msg = new Message("YourTopic","*","This is a new message".getBytes());
    /**
    * 为每条消息设置具有业务区分度的 Key。
    */
    msg.setKey("NewKey"+System.currentTimeMillis()); 
    

查询消息

  1. 登录消息队列 RocketMQ版控制台
  2. 在顶部菜单栏中选择地域,并在选择左侧导航栏中单击实例
  3. 实例页面找到目标实例,单击实例名称。
  4. 在顶部页签栏中单击消息查询
  5. 选择消息查询的方式,并根据页面提示输入对应信息,并单击查询
    • 按消息ID查询
      Topic中选择待查询的消息所在的Topic,并在消息ID中输入待查询的消息ID。
      按消息 ID 查询时,可以根据消息 ID 精确找到指定的某条消息,为便于消息查询和问题排查,建议在发送消息成功后将消息 ID 打印到日志中。
    • 按消息 Key 查询
      在Topic中选择待查询的消息所在的Topic,并在消息Key中输入待查询的消息 Key。
      按消息 Key 查询时,会筛选出包含指定 Key 的消息列表中最近 64 条消息,适用于没有记录消息 ID 但是设置了消息 Key 的场景。
    • 按时间范围查询
      Topic中选择待查询的消息所在的 Topic,并在存储时间选择待查询消息的时间段。
      按时间范围查询时,建议根据消息生产的速率合理指定时间范围。如果指定的时间范围较大,或指定时间范围内产生的消息较多,查询结果中会有大量符合条件的消息,不方便定位问题。
  6. 查看查询结果。
    查询结果会即时显示在当前页面中,主要展示符合筛选条件的消息详情,包括消息ID、Tag、Key、生产者地址、消息大小(Bytes)、生成时间、存储时间。
    图片

重新发送消息

在消费异常的场景下,客户端未成功消费部分消息,造成消息丢失,影响业务侧的消费完整性。消息队列 RocketMQ版提供消息重发功能,您可以通过消息查询功能找到需要重发的消息列表,并重新发送这些消息到指定 Group 的重试 Topic 或原 Topic 中。消息重发功能支持逐条重发、批量重发或按时间段重发消息。
消息重发功能适用于消费异常的场景,其与重置消费位点的区别在于,消息重发功能可以指定重发的消息列表,客户端因此只需重新消费指定的消息即可,重置消费位点则需要重新消费指定位点之后的所有消息。

说明

若此消息所在的 Topic 是顺序消息类型的 Topic,重新发送消息可能会导致 Topic 出现消息乱序。延迟消息和事务消息也会失去其对应的消息属性。

操作步骤如下。

  1. 在控制台中查询消息。 详细操作请参考查询消息。
  2. 重新发送消息。
    您可以根据业务需要,选择以下任一方式重发消息。
    • 逐条发送消息
      1. 在查询结果中,找到指定的消息,并在其操作列中单击 .. > 重新发送
      2. (可选)在弹出的对话框中设置 Group,将消息重发至 Group 对应的重试 Topic 中。
        若未指定 Group,重发时将会把消息重发至原 Topic 中。
      3. 单击立即发送
        图片
    • 批量发送消息
      1. 选择多条消息,并在页面右上角单击批量操作 > 批量重发
      2. (可选)在弹出的对话框中设置 Group,将消息重发至 Group 对应的重试 Topic 中。
        若未指定 Group,重发时将会把消息重发至原 Topic 中。
      3. 单击立即发送
        图片
    • 按时间范围重发消息
      1. 在页面右上角单击按时间范围重发

      2. 填写相关设置。

        参数

        说明

        Topic

        选择需要重发消息的 Topic。

        消息存储时间

        指定一个时间段,消息达到服务端的时间如果在此范围内,则会被重新发送。

        Group

        选择消息重新发送到的 Group,消息会重发至指定 Group 对应的重试 Topic 中。
        可选,若未指定 Group,重发时将会把消息重发至原 Topic 中。

      3. 单击立即发送

您可以在后台任务管理页面查看消息重发任务的状态及执行结果。详细说明请参考后台任务管理
图片

下载消息内容

查找到指定的消息后,可以在消息查询页签中下载消息内容,与生产端或消费端的消息内容进行比对,排查生产消费环节的问题。

  1. 下载消息。
    在查询结果中,找到指定的消息,并在其操作列中单击下载消息
  2. 查看消息内容。
    页面自动下载 .txt 格式的消息文件,其中包含消息体的详细内容。

后续步骤

查询到消息详情后,还可以通过消息轨迹功能查看消息从生产到发送订阅的全流程链路,进一步排查生产环境中的消息生产问题。详细信息请参考消息轨迹