更新时间:2024-04-07 GMT+08:00

管理死信队列

什么是死信队列?

死信队列用于处理无法被正常消费的消息。

一条消息初次消费失败会被重试消费,若重试次数达到最大值(默认16次,在客户端可配置)时,依然消费失败,则其将被投递到该消费者对应的特殊队列(即死信队列)中,这种消息被称为死信消息。

死信消息具有如下特性:

  • 不会再被消费者正常消费。
  • 死信消息默认保留时间为48小时,超时后,会被自动删除。

操作场景

本章节主要介绍如何查询、导出和重新投递死信消息。

分布式消息服务RocketMQ版提供三种死信消息查询的方法:按Group查询、按Message ID查询和按Message Key查询。

  • 按Group查询:查询某时间段内指定消费组下所有的死信消息。此方法属于范围查询,查询到的死信消息可能比较多。
  • 按Message ID查询:查询指定Message ID的消息。此方法属于精确查找,可以快速查询到某一条死信消息。
  • 按Message Key查询:查询指定Message Key的消息。此方法属于精确查找,可以快速查询到某一条死信消息。

前提条件

  • 已创建RocketMQ实例和消费组。
  • 如果通过按Message ID查询,需要提前获取消息所在的消费组名称和消息的Message ID。
  • 如果通过按Message Key查询,需要提前获取消息所在的消费组名称和消息的Message Key。

查询死信消息

  1. 登录管理控制台。
  2. 在管理控制台左上角单击,选择区域。

    请选择RocketMQ实例所在的区域。

  3. 在管理控制台左上角单击,选择“应用服务 > 分布式消息服务RocketMQ版”,进入分布式消息服务RocketMQ专享版页面。
  4. 单击RocketMQ实例的名称,进入实例详情页面。
  5. 在左侧导航栏,单击“死信队列”,进入“死信队列”页面。
  6. 选择以下任意一种方法,查询死信消息。

    • 按Group查询:“Group”选择待查询消费组的名称,“存储时间”选择待查询死信消息的时间段,单击“查询”。
    • 按Message ID查询:“Group”选择待查询消费组的名称,“Message ID”输入待查询死信消息的Message ID,单击“查询”。
    • 按Message Key查询:“Group”选择待查询消费组的名称,“Message Key”输入待查询死信消息的Message Key,单击“查询”。

导出死信消息

  1. 登录管理控制台。
  2. 在管理控制台左上角单击,选择区域。

    请选择RocketMQ实例所在的区域。

  3. 在管理控制台左上角单击,选择“应用服务 > 分布式消息服务RocketMQ版”,进入分布式消息服务RocketMQ专享版页面。
  4. 单击RocketMQ实例的名称,进入实例详情页面。
  5. 在左侧导航栏,单击“死信队列”,进入“死信队列”页面。
  6. 在待导出的死信消息所在行,单击“导出消息”。

    导出JSON格式的文件。

    如果需要批量导出死信消息,勾选待导出的多条死信消息,单击“批量导出消息”。

    导出的消息字段说明如表1所示。

    表1 消息字段说明

    消息字段

    字段说明

    msg_id

    消息ID。

    instance_id

    实例ID。

    topic

    Topic名称。

    store_timestamp

    存储消息的时间。

    born_timestamp

    产生消息的时间。

    reconsume_times

    重试次数。

    body

    消息体。

    body_crc

    消息体校验和。

    store_size

    存储大小。

    property_list

    消息属性列表。

    • name:属性名称。
    • value:属性值。

    born_host

    产生消息的主机IP。

    store_host

    存储消息的主机IP。

    queue_id

    队列ID。

    queue_offset

    在队列中的偏移量。

重新投递死信消息

死信消息由于某些原因无法正常被消费者消费,请排查相关原因并解决,然后在控制台重新投递死信消息给消费者消费。

  1. 登录管理控制台。
  2. 在管理控制台左上角单击,选择区域。

    请选择RocketMQ实例所在的区域。

  3. 在管理控制台左上角单击,选择“应用服务 > 分布式消息服务RocketMQ版”,进入分布式消息服务RocketMQ专享版页面。
  4. 单击RocketMQ实例的名称,进入实例详情页面。
  5. 在左侧导航栏,单击“死信队列”,进入“死信队列”页面。
  6. 选择以下任意一种方法重新投递死信消息。

    • 在待重新投递的死信消息所在行,单击“重投”。
    • 如需批量重新投递死信消息,勾选待重新投递的死信消息,单击“批量重投”。

    死信消息重新投递成功后,此死信消息依然存在死信队列中,不会被删除。避免多次重复投递,造成重复消费。