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

死信管理

最近更新时间2023.02.22 11:39:50

首次发布时间2022.03.05 11:34:49

在 RocketMQ 中,死信队列用于处理无法被正常消费的消息,即死信消息。火山引擎消息队列 RocketMQ版支持查询和导出进入死信队列的死信消息,本文介绍相关的操作步骤。

背景信息

如果一条消息消费失败,消息队列 RocketMQ版会自动重试消费,达到最大重试次数后,如果仍旧消费失败,说明消费者在正常情况下无法正确地消费该消息。这种消息被称为死信消息(Dead-Letter Message)。这种情况下,消息队列 RocketMQ版不会立刻丢弃消息,而是将死信消息发送至该消费者对应的特殊队列中,这种存储死信消息的特殊队列称为死信队列(Dead-Letter Queue)。

在消息队列 RocketMQ版控制台中,您可以在线查询死信消息,并在消息被过期清理前,及时导出未正常消费的信息,排查消息生产或消费问题,避免消息丢失。

消息队列 RocketMQ版提供以下方式查询消息详情。

  • 按消息 ID 查询。 查询指定 Group ID 下指定 Message ID 的消息。按消息 ID 查询时,可以精确到某一条消息,适用于精确查询的情况。
  • 按时间范围查询。 根据 Group ID 和死信消息产生的时间范围,查询该 Group ID 在某段时间内产生的所有死信消息。按时间范围查询时,会筛选出符合条件的消息列表,查询到的死信消息可能比较多。

注意事项

  • 一个死信队列对应一个 Group ID, 而不是对应单个消费者实例。一个死信队列包含了对应 Group ID 产生的所有死信消息,不论该消息属于哪个 Topic。
  • 创建 Group 时,消息队列 RocketMQ版会自动为其创建一个对应的死信队列。
  • 死信消息将会根据存储时长被系统定时删除,在查看或导出过程中,可能会存在死信消息失效的情况。

查询死信消息

  1. 登录消息队列 RocketMQ版控制台

  2. 在顶部菜单栏中选择地域。

  3. 实例列表页面单击实例名称。

  4. 死信管理页签中选择消息查询方式,并指定筛选条件。
    目前支持按消息ID查询按时间范围查询,请根据实际业务需求选择查询方式。

    • 按消息ID查询。 选择按消息ID查询,指定Group ID消息ID并单击查询
    • 按时间范围查询。 选择按时间范围查询,指定Group ID消息存储时间并单击查询。 其中,消息存储时间指消息在投递重试达到最大次数后被发送到死信队列的时间。
  5. 查看查询结果。
    查询结果会即时显示在当前页面中,主要展示符合筛选条件的消息详情,包括消息 IDTagKey生产者地址消息大小(Bytes)重试次数生成时间存储时间。其中,重试次数表示手动重发死信消息后,该消息再次进入死信队列的次数。

导出死信消息

查找到指定的死信消息后,可以在死信管理页签中导出死信消息,支持批量导出,一次最多导出 20 条消息。

操作步骤如下。

  1. 在控制台中查询死信消息。详细操作请参考查询死信消息

  2. 在查询结果中,找到指定的死信消息,并在其操作列中单击导出消息
    您也可以勾选多条死信消息,并选择批量操作 > 批量导出。页面会自动下载 CSV 格式的文件,其中包含指定导出的所有死信消息。

导出的 CSV 文件中,各个消息字段说明如下。

消息字段说明
instanceId实例 ID。
topic消息所属的 Topic。
msgId消息的 ID。
bornHost消息产生的地址。
bornTimestamp消息产生的时间戳。
storeTimestamp消息存储到消息队列 RocketMQ版服务端的时间戳。
reconsumeTimes消息消费失败的次数。
properties消息的属性。JSON 格式。
body消息内容,即消息体。Base64 编码格式。您需要解码后才能查看实际消息内容。
bodyCRC消息体 CRC。

msgNotExist

消息是否已过期删除。

  • true:消息已因过期而被删除,无法导出查看。
  • false:消息仍未过期,可以导出查看。

重新发送死信消息

消息进入死信队列之后,说明该消息消费失败,消费者在正常情况下无法正确地消费该消息,例如遇到了网络断连、应用故障等问题。在这种场景下,您可以查询、导出死信消息进行问题排查,当找到对应的解决方案、处理问题之后,在控制台中重新发送死信队列中的消息。此时该消息的原消费者可以重新消费消息。

说明

  • 若此死信消息所在的 Topic 是顺序消息类型的 Topic,重新发送死信消息可能会导致 Topic 出现消息乱序。延迟消息和事务消息也会失去其对应的消息属性。
  • 死信消息被重新发送成功后,也会显示在死信队列中,直到消息过期删除。

操作步骤如下。

  1. 在控制台中查询死信消息。
    详细操作请参考查询死信消息

  2. 重新发送死信消息。
    您可以根据业务需要,选择以下任一方式重发死信消息。

    • 逐条发送死信消息

      1. 在查询结果中,找到指定的死信消息,并在其操作列中单击重新发送
      2. 在弹出的对话框中单击立即发送

      alt

    • 批量发送死信消息

      1. 选择多条死信消息,并在页面右上角单击批量操作 > 批量重发
      2. 在弹出的对话框中单击立即发送

      alt

    • 按时间范围重发死信消息

      1. 在页面右上角单击按时间范围重发

      2. 填写相关设置。

        参数说明
        Group选择消息重新发送到的 Group,消息会重发至指定 Group 对应的重试 Topic 中。
        消息存储时间指定消息的时间范围,消息达到服务端的时间如果在此范围内,将会被重新发送到指定 Group 对应的重试 Topic 中。
      3. 单击立即发送

        说明

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

        alt