在消息队列 RocketMQ版控制台中,您可以在线查询死信消息,并在消息被过期清理前,及时导出未正常消费的信息,排查消息生产或消费问题,避免消息丢失。
注意事项
- 一个死信队列对应一个 Group ID, 而不是对应单个消费者实例。一个死信队列包含了对应 Group ID 产生的所有死信消息,不论该消息属于哪个 Topic。
- 创建 Group 时,消息队列 RocketMQ版会自动为其创建一个对应的死信队列。
- 死信消息将会根据存储时长被系统定时删除,在查看或导出过程中,可能会存在死信消息失效的情况。
查询死信消息
- 登录消息队列 RocketMQ版控制台。
- 在顶部菜单栏中选择地域。
- 在实例列表页面单击实例名称。
- 在死信管理页签中选择消息查询方式,并指定筛选条件。
目前支持按消息ID查询或按时间范围查询,请根据实际业务需求选择查询方式。
- 按消息ID查询。 选择按消息ID查询,指定 Group ID 和消息 ID 查询死信息消息。按消息 ID 查询时,可以精确到某一条消息,适用于精确查询的情况。
- 按时间范围查询。 选择按时间范围查询,指定 Group ID 和时间范围查询死信消息列表。 其中,时间指消息在投递重试达到最大次数后被发送到死信队列的时间。按时间范围查询时,会筛选出符合条件的消息列表,查询到的死信消息可能比较多。
- 查看查询结果。
查询结果会即时显示在当前页面中,主要展示符合筛选条件的消息详情,包括消息 ID、Tag、Key、生产者地址、消息大小(Bytes)、重试次数、生成时间、存储时间。其中,重试次数表示手动重发死信消息后,该消息再次进入死信队列的次数。
导出死信消息
查找到指定的死信消息后,可以在死信管理页签中导出死信消息,支持批量导出,一次最多导出 20 条消息。
操作步骤如下。
在控制台中查询死信消息。详细操作请参考查询死信消息。
在查询结果中,找到指定的死信消息,并在其操作列中单击导出消息。
您也可以勾选多条死信消息,并单击左下角的批量导出。页面会自动下载 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 出现消息乱序。延迟消息和事务消息也会失去其对应的消息属性。
- 死信消息被重新发送成功后,也会显示在死信队列中,直到消息过期删除。
操作步骤如下。
在控制台中查询死信消息。
详细操作请参见查询死信消息。
重新发送死信消息。
您可以根据业务需要,选择以下任一方式重发死信消息。
发送方式 | 步骤 |
---|
逐条发送死信消息 | - 在查询结果中,找到指定的死信消息,并在其操作列中单击重新发送。
- 在弹出的对话框中单击立即发送。
|
批量发送死信消息 | - 选择多条死信消息,并在页面左下角单击批量重发。
- 在弹出的对话框中单击立即发送。
|
按时间范围重发死信消息 | - 选择多条死信消息,并在页面左下角单击按时间范围重发。
- 填写相关设置。
- Group:选择消息重新发送到的 Group,消息会重发至指定 Group 对应的重试 Topic 中。
- 消息存储时间:指定消息的时间范围,消息达到服务端的时间如果在此范围内,将会被重新发送到指定 Group 对应的重试 Topic 中。
- 单击立即发送。
|