首页 > 解决方案 > SQS消息失败时如何保持活动状态?

问题描述

我正在使用 SQS 来保存 http 请求。当请求失败时,如何保持消息处于活动状态(在队列中)以重新处理,而没有另一个进程抓住它?

标签: amazon-web-servicesamazon-sqs

解决方案


典型的流程是:

  • 一条消息被放入Amazon SQS 队列
  • 工作进程调用ReceiveMessage()以从队列中检索消息
  • 该消息被暂时标记为“不可见”(飞行中),以便其他工作人员看不到该消息
  • 如果worker成功处理消息,它会调用DeleteMessage()永久删除消息
  • 如果工作人员在Invisibility Timeout 期限内没有响应(例如,如果它失败了),则消息将重新出现在队列中。然后该消息可以被另一个工作人员获取。
  • 如果已配置死信队列,则从队列中检索超过定义次数的消息将被移至死信队列以进行单独调查或重新处理。

您的问题似乎适合使用死信队列的场景。


推荐阅读