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

消息查询

最近更新时间2024.04.19 11:50:04

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

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

背景信息

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

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

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

查询方式

说明

按消息 ID 查询

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

按消息 Key 查询

在指定 Topic 中根据指定 Key 查询消息列表。
按消息 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 的消息列表中最近 16 条消息,适用于没有记录消息 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 格式的消息文件,其中包含消息体的详细内容。