全部产品
云市场

死信队列

更新时间:2019-09-13 22:00:13

死信队列用于处理无法被正常消费的消息,即死信消息。本文通过介绍如何查询、导出和重新发送进入死信队列的死信消息,以便您按需管理死信消息,避免消息漏处理。

背景信息

当一条消息初次消费失败,消息队列 MQ 会自动进行消息重试;达到最大重试次数后,若消费依然失败,则表明消费者在正常情况下无法正确地消费该消息,此时,消息队列 MQ 不会立刻将消息丢弃,而是将其发送到该消费者对应的特殊队列中。

在消息队列 MQ 中,这种正常情况下无法被消费的消息称为死信消息(Dead-Letter Message),存储死信消息的特殊队列称为死信队列(Dead-Letter Queue)。

特性说明

死信消息具有以下特性:

  • 不会再被消费者正常消费。
  • 有效期与正常消息相同,均为 3 天,3 天后会被自动删除。因此,请在死信消息产生后的 3 天内及时处理。

死信队列具有以下特性:

  • 一个死信队列对应一个 Group ID, 而不是对应单个消费者实例。
  • 如果一个 Group ID 未产生死信消息,消息队列 MQ 不会为其创建相应的死信队列。
  • 一个死信队列包含了对应 Group ID 产生的所有死信消息,不论该消息属于哪个 Topic。

消息队列 MQ 控制台提供对死信消息的查询、导出和重发的功能。

查询死信消息

消息队列 MQ 提供的查询死信消息的方式对比如下表所示。

查询方式 查询条件 查询类别 说明
按 Group ID 查询 Group ID+时间段 范围查询 根据 Group ID 和时间范围,批量获取符合条件的所有消息;查询量大,不易匹配。
按 Message ID 查询 Group ID+Message ID 精确查询 根据 Group ID 和 Message ID 可以精确定位任意一条消息。

按 Group ID 查询

您可以根据 Group ID 和死信消息产生的时间范围,批量查询该 Group ID 在某段时间内产生的所有死信消息。

注意: 死信消息产生的时间是指一条消息在投递重试达到最大次数后被发送到死信队列的时间。

操作步骤

  1. 登录消息队列 MQ 控制台。在顶部导航栏,选择地域(Region),如华北1(杭州)

  2. 在左侧导航栏,单击死信队列

  3. 死信队列页面,单击实例,然后再单击按 Group ID 查询页签。

  4. 在 Group ID 的输入框中,输入关键词搜索想要查找的 Group ID,然后单击选中,或直接在下拉列表中选择想要查找的 Group ID。

  5. 单击时间选择框,选择想要查询的时间范围的起止日期和具体时间点。

  6. 单击搜索按钮。页面中会显示所有符合以上条件的死信消息。

  7. 找到想要查看的死信消息,单击其操作列中的查看详情查看该消息的详细信息,包括其基本属性、消息体的下载链接、消息轨迹和投递状态。

按 Message ID 查询

按 Message ID 查询消息属于精确查询。您可以根据 Group ID 与 Message ID 精确查询到任意一条消息。

操作步骤

  1. 登录消息队列 MQ 控制台。在顶部导航栏,选择地域,如华北1(杭州)

  2. 在左侧导航栏,单击死信队列

  3. 死信队列页面,单击实例,然后再单击按 Message ID 查询页签。

  4. 在 Group ID 的输入框中,输入关键词搜索想要查找的 Group ID,然后单击选中,或直接在下拉列表中选择想要查找的 Group ID。

  5. 在 Message ID 的输入框中输入想要查找的消息的 Message ID。

  6. 单击搜索按钮。页面中会显示所有符合以上条件的死信消息。

  7. 找到想要查看的死信消息,单击其操作列中的查看详情查看该消息的详细信息,包括其基本属性、消息体的下载链接、消息轨迹和投递状态。

导出死信消息

若您暂时无法处理死信消息,可以在消息队列 MQ 控制台上将其导出,以免超过有效期。

消息队列 MQ 控制台提供对死信消息的单条导出批量导出功能。导出的文件格式为 CSV。

导出的消息内容如下表所示。

消息字段 字段含义
topic 消息所属的 Topic
msgId 消息的 ID
bornHost 消息产生的地址
bornTimestamp 消息产生的时间
storeTimestamp 死信消息产生的时间
reconsumeTimes 消费失败的次数
properties 消息属性;JSON 格式
body 消息体;base64 编码格式
bodyCRC 消息体 CRC

单条导出

在消息队列 MQ 控制台按任意方式查询到死信消息后,在某条死信消息的操作列,单击导出,导出该条死信消息。

批量导出

在消息队列 MQ 控制台按 Group ID 查询到死信消息后,勾选目标死信消息,然后单击页面下方的批量导出按钮,导出所有勾选的死信消息。

重新发送死信消息

一条消息进入死信队列,意味着某些因素导致消费者无法正常消费该消息,因此,通常需要您对其进行特殊处理。排查可疑因素并解决问题后,您可以在消息队列 MQ 控制台重新发送该消息,让消费者重新消费一次。

注意:死信消息被重新发送后,不会在死信队列中被立即删除。

单条重发

在消息队列 MQ 控制台按任意方式查询到死信消息后,在某条死信消息的操作列,单击重新发送,重发该条死信消息。

批量重发

在消息队列 MQ 控制台按 Group ID 查询到死信消息后,勾选目标死信消息,然后单击页面下方的批量重发按钮,重新发送所有勾选的死信消息。