AWS 宣布支持通过 SDK 或 CLI 重新驱动 SQS 死信队列中的消息
AWS 最近宣布通过 AWS SDK 或命令行界面(CLI)支持 Amazon SQS(简单队列服务)中的死信队列(DLQ)重新驱动功能。这一新功能允许开发者将未消费的消息从现有的死信队列移回其源队列。
死信队列的作用
当消息处理失败时,SQS 会将未消费的消息移动到死信队列中,以便开发者检查并调试应用程序的故障。AWS 首席开发者倡导者 Sébastien Stormacq 解释说,每次消费者应用程序尝试处理消息时,消息的接收计数会增加 1。当接收计数超过最大接收次数时,SQS 会将消息移动到指定的死信队列中,供人工分析和调试。通常,开发者会在死信队列上设置警报,以便在发生此类事件时发送通知。
新功能:消息重新驱动
一旦失败的消息被调试成功或消费者应用程序可以重新处理这些消息,新的重新驱动功能可以将这些消息移回源队列。这一功能通过编程方式管理分布式系统中未消费消息的生命周期,提高了处理效率。
过去的局限与改进
过去,开发者只能在 AWS 控制台中手动处理死信队列中的消息。Ampt 的 CEO 和创始人 Jeremy Daly 曾表示,虽然这一功能有用,但他并不愿意登录 AWS 控制台来使用它。现在,通过新的 API 和 CLI 支持,开发者可以更高效地处理死信队列中的消息。
重新驱动任务
为了重新处理死信队列中的消息,开发者可以使用以下任务:
- StartMessageMoveTask:启动从死信队列移动消息的新任务。
- CancelMessageMoveTask:取消消息移动任务。
- ListMessageMoveTasks:获取指定源队列的最新消息移动任务(最多 10 个)。
社区反响
这一功能受到了社区的广泛欢迎。MUSIC Tribe 的云和平台负责人 Tiago Barbosa 表示,这是对死信队列使用体验的显著改进,过去他不太喜欢使用死信队列的原因之一就是需要构建机制来重新处理其中的消息。Curantis Solutions 的 CTO Benjamen Pyle 还撰写了一篇文章,介绍如何使用 Golang 和 Step Functions 重新驱动消息。
配置选项
在配置死信队列时,开发者可以指定消息是否应返回到其源队列或其他队列,并使用自定义目标队列的 ARN。PostNL 的首席工程师 Luc van Donkersgoed 表示,这一功能不仅允许将消息重新驱动到原始队列,还可以指定任何目标队列,这极大地简化了 Lambda 函数的使用。
限制与注意事项
文档中强调了以下限制:
- SQS 仅支持标准队列的死信队列重新驱动,不支持在重新处理时过滤和修改消息。
- 死信队列重新驱动任务最多可以运行 36 小时,每个账户最多可以有 100 个活动的重新驱动任务。
- 一些开发者对 Step Functions 中缺乏支持表示疑问。
此外,SQS 不会自动创建死信队列,开发者需要在接收未消费消息之前创建并配置死信队列。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。