最近更新时间: 2021-03-15 17:25:30
死信队列用于处理无法被正常消费的消息,即死信消息。本文通过介绍如何查询、导出和重新发送进入死信队列的死信消息,以便您按需管理死信消息,避免消息漏处理。
当一条消息初次消费失败,消息队列 RocketMQ 会自动进行消息重试;达到最大重试次数后,若消费依然失败,则表明消费者在正常情况下无法正确地消费该消息,此时,消息队列 RocketMQ 不会立刻将消息丢弃,而是将其发送到该消费者对应的特殊队列中。 在消息队列 RocketMQ 中,这种正常情况下无法被消费的消息称为死信消息(Dead-Letter Message),存储死信消息的特殊队列称为死信队列(Dead-Letter Queue)。
死信消息具有以下特性:
死信队列具有以下特性:
消息队列 RocketMQ 控制台提供对死信消息的查询、导出和重发的功能。
消息队列 RocketMQ 提供的查询死信消息的方式对比如下表所示。
| 查询方式 | 查询条件 | 查询类别 | 说明 |
|---|---|---|---|
| 按 Group ID 查询 | Group ID+时间段 | 范围查询 | 根据 Group ID 和时间范围,批量获取符合条件的所有消息;查询量大,不易匹配。 |
| 按 Message ID 查询 | Group ID+Message ID | 精确查询 | 根据 Group ID 和 Message ID 可以精确定位任意一条消息。 |
您可以根据 Group ID 和死信消息产生的时间范围,批量查询该 Group ID 在某段时间内产生的所有死信消息。 注意: 死信消息产生的时间是指一条消息在投递重试达到最大次数后被发送到死信队列的时间。
按 Message ID 查询消息属于精确查询。您可以根据 Group ID 与 Message ID 精确查询到任意一条消息。
若您暂时无法处理死信消息,可以在消息队列 RocketMQ 控制台上将其导出,以免超过有效期。 消息队列 RocketMQ 控制台提供对死信消息的单条导出和批量导出功能。导出的文件格式为 CSV。 导出的消息内容如下表所示。
| 消息字段 | 字段含义 |
|---|---|
| topic | 消息所属的 Topic |
| msgId | 消息的 ID |
| bornHost | 消息产生的地址 |
| bornTimestamp | 消息产生的时间 |
| storeTimestamp | 死信消息产生的时间 |
| reconsumeTimes | 消费失败的次数 |
| properties | 消息属性;JSON 格式 |
| body | 消息体;base64 编码格式 |
| bodyCRC | 消息体 CRC |
在消息队列 RocketMQ 控制台按任意方式查询到死信消息后,在某条死信消息的操作列,单击导出,导出该条死信消息。
一条消息进入死信队列,意味着某些因素导致消费者无法正常消费该消息,因此,通常需要您对其进行特殊处理。排查可疑因素并解决问题后,您可以在消息队列 RocketMQ 控制台重新发送该消息,让消费者重新消费一次。 注意:死信消息被重新发送后,不会在死信队列中被立即删除。
在消息队列 RocketMQ 控制台按任意方式查询到死信消息后,在某条死信消息的操作列,单击重新发送,重发该条死信消息。
这篇文档有帮助吗?
正在加载反馈服务…