管理死信队列
什么是死信队列?
死信队列用于处理无法被正常消费的消息。
一条消息初次消费失败会被重试消费,若重试次数达到最大值(默认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。
查询死信消息
- 登录管理控制台。
- 在管理控制台左上角单击,选择区域。
请选择RocketMQ实例所在的区域。
- 在管理控制台左上角单击,选择“应用服务 > 分布式消息服务 RocketMQ”,进入分布式消息服务RocketMQ专享版页面。
- 单击RocketMQ实例的名称,进入实例详情页面。
- 在左侧导航栏,单击“死信队列”,进入“死信队列”页面。
- 选择以下任意一种方法,查询死信消息。
- 按Group查询:“Group”选择待查询消费组的名称,“存储时间”选择待查询死信消息的时间段,单击“查询”。
- 按Message ID查询:“Group”选择待查询消费组的名称,“Message ID”输入待查询死信消息的Message ID,单击“查询”。
- 按Message Key查询:“Group”选择待查询消费组的名称,“Message Key”输入待查询死信消息的Message Key,单击“查询”。
导出死信消息
- 登录管理控制台。
- 在管理控制台左上角单击,选择区域。
请选择RocketMQ实例所在的区域。
- 在管理控制台左上角单击,选择“应用服务 > 分布式消息服务 RocketMQ”,进入分布式消息服务RocketMQ专享版页面。
- 单击RocketMQ实例的名称,进入实例详情页面。
- 在左侧导航栏,单击“死信队列”,进入“死信队列”页面。
- 在待导出的死信消息所在行,单击“导出消息”。
导出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
在队列中的偏移量。
重新投递死信消息
死信消息由于某些原因无法正常被消费者消费,请排查相关原因并解决,然后在控制台重新投递死信消息给消费者消费。
- 登录管理控制台。
- 在管理控制台左上角单击,选择区域。
请选择RocketMQ实例所在的区域。
- 在管理控制台左上角单击,选择“应用服务 > 分布式消息服务 RocketMQ”,进入分布式消息服务RocketMQ专享版页面。
- 单击RocketMQ实例的名称,进入实例详情页面。
- 在左侧导航栏,单击“死信队列”,进入“死信队列”页面。
- 选择以下任意一种方法重新投递死信消息。
- 在待重新投递的死信消息所在行,单击“重投”。
- 如需批量重新投递死信消息,勾选待重新投递的死信消息,单击“批量重投”。
死信消息重新投递成功后,此死信消息依然存在死信队列中,不会被删除。避免多次重复投递,造成重复消费。