操作场景
死信队列用于处理无法被正常消费的消息。
一条消息初次消费失败会被重试消费,若重试次数达到最大值(默认16次,在客户端可配置)时,依然消费失败,则其将被投递到该消费者对应的特殊队列(即死信队列)中,这种消息被称为死信消息。
本章节主要介绍如何查询、导出和重新投递死信消息。
分布式消息服务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实例的名称,进入实例详情页面。
-
在左侧导航栏,单击“死信队列”,进入“死信队列”页面。
图1 查询死信消息
-
选择以下任意一种方法,查询死信消息。
- 按Group查询:“Group”选择待查询消费组的名称,“存储时间”选择待查询死信消息的时间段,单击“查询”。
- 按Message ID查询:“Group”选择待查询消费组的名称,“Message ID”输入待查询死信消息的Message ID,单击“查询”。
- 按Message Key查询:“Group”选择待查询消费组的名称,“Message Key”输入待查询死信消息的Message Key,单击“查询”。
导出死信消息
- 登录分布式消息服务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 | 消息属性列表。lname:属性名称。lvalue:属性值。 |
born_host | 产生消息的主机IP。 |
store_host | 存储消息的主机IP。 |
queue_id | 队列ID。 |
queue_offset | 在队列中的偏移量。 |
重新投递死信消息
死信消息由于某些原因无法正常被消费者消费,请排查相关原因并解决,然后在控制台重新投递死信消息给消费者消费。
- 登录分布式消息服务RocketMQ控制台。
- 单击RocketMQ实例的名称,进入实例详情页面。
- 在左侧导航栏,单击“死信队列”,进入“死信队列”页面。
- 选择以下任意一种方法重新投递死信消息。
- 在待重新投递的死信消息所在行,单击“重投”。
- 如需批量重新投递死信消息,勾选待重新投递的死信消息,单击“批量重投”。
须知:
死信消息重新投递成功后,此死信消息依然存在死信队列中,不会被删除。避免多次重复投递,造成重复消费。