消息查询

云消息队列 RocketMQ 版提供了三种消息查询的方式,分别是按Message ID、Message Key以及Topic查询。您可以通过消息查询验证消息是否发送成功、验证消息发送的内容是否正确、以及进一步查看消息的轨迹信息。

查询方式说明

由于消息在云消息队列 RocketMQ 版中存储的时间默认为3天(不建议修改),即只能查询从当前查询时间算起3天内的消息。例如,当前时间是2019年06月10日15:09:48,那么能查询到的某Topic下的消息最早的时间点为2019年06月07日15:09:48。

三种查询方式的特点和对比如下表所述。

查询方式

查询条件

查询类别

说明

按Message ID查询

Topic+Message ID

精确查询

根据Topic和Message ID可以精确定位任意一条消息,获取消息的属性。

按Message Key查询

Topic+Message Key

模糊查询

根据Topic和Message Key可以匹配到包含指定Key的最近64条消息。

重要

建议消息生产方为每条消息设置尽可能唯一的Key,以确保相同的Key的消息不会超过64条,否则消息会漏查。

按Topic查询

Topic+时间段

范围查询

根据Topic和时间范围,批量获取符合条件的所有消息,查询量大,不易匹配。

推荐查询过程

推荐按照以下流程查询消息。

消息查询

操作步骤

  1. 登录云消息队列 RocketMQ 版控制台,在左侧导航栏,单击实例列表

  2. 在顶部菜单栏,选择地域,如华东1(杭州)

  3. 实例列表页面,找到目标实例,在其操作列,单击更多,然后在下拉菜单中,选择消息查询

  4. 消息查询页面,您可选择以下任意一种查询方式,然后按页面提示输入相应信息,再单击查询来查询消息。

    • 按 Message ID 查询

      按Message ID查询消息属于精确查询,您输入Topic和Message ID即可精确查询到任意一条消息。因此,为了尽可能精确地查询,建议在发送消息成功后将Message ID信息打印到日志中,方便问题排查。

      以Java SDK为例,获取Message ID的方法如下。

         SendResult sendResult = producer.send(msg);
         String msgId = sendResult.getMessageId();

      其他语言可参见SDK参考概述

    • 按 Message Key 查询

      云消息队列 RocketMQ 版根据您设置的Message Key建立消息的索引信息,当您输入Key进行查询时,云消息队列 RocketMQ 版根据该索引即可匹配相关的消息返回。

      重要
      • 按Message Key查询的条件是您在发送消息时已设置Message Key属性。

      • 按Message Key查询仅返回符合条件的最近的64条消息,因此建议您尽可能保证设置的Key是唯一的,并具有业务区分度。

      设置Message Key的方法如下。

              Message msg = new Message("Topic","*","Hello MQ".getBytes());
              /**
             * 对每条消息设置其检索的Key,该Key值代表消息的业务关键属性,请尽可能全局唯一。
             * 以方便您在无法正常收到消息情况下,可通过消息队列RocketMQ版控制台查询消息。不设置也不会影响消息正常收发。
             */
            msg.setKey("TestKey"+System.currentTimeMillis());                                
    • 按 Topic 查询

      按Topic查询一般用在Message ID和Message Key都无法获得的情况下,根据Topic和消息的发送时间范围,批量获取该时间范围内的所有消息,然后再找到关心的数据。

      重要

      若按Topic查询消息,请注意以下几点:

      • 按Topic查询属于范围查询,获取Topic下符合时间条件的所有消息,消息量大,建议尽量缩短查询区间。

      • 按Topic查询消息量大,采用分页展示。

查询结果说明

您可以在控制台的消息查询页面看到查询到的消息。直接显示的信息包含Message ID、Tag、Key、生成时间及存储时间。此外,您还可以查询消息轨迹、进行消费验证或下载消息。

消费验证

云消息队列 RocketMQ 版提供了消费验证功能,该功能可以将指定消息推送给指定的在线客户端,以检测客户端消费该消息的逻辑和结果是否符合预期。

消费验证功能仅用于验证客户端的消费逻辑是否正常,并不会影响正常的收消息流程,因此消息的消费状态等信息在消费验证后并不会改变。

重要

消费验证功能仅用于验证客户端的消费逻辑是否正常,并不会影响正常的收消息流程,因此消息的消费状态等信息在消费验证后并不会改变。

consumer_vaildate

相关文档

您可以根据消息查询结果进一步查看消息的轨迹信息,查看消息的消费状态和消费结果。具体操作,请参见查询消息轨迹