我能否判断 Amazon SQS 消息是否仍在传输中?

Can I tell if an Amazon SQS message is still in flight?

给定一条 Amazon SQS 消息,有没有办法通过 API 判断它是否仍在运行中?或者,我是否需要在收到消息时记下时间戳,从当前时间中减去它,然后检查它是否小于可见性超时?

使用 Amazon Simple Queuing Service (SQS) 的正常流程是:

  • 使用 SendMessage 将消息推送 到队列中(它最多可以在队列中保留 14 天)
  • 应用程序使用 ReceiveMessage 从队列中检索 消息(不保证先进先出)
  • 当应用程序完成处理消息时,它调用DeleteMessage(它也可以调用ChangeMessageVisibility来延长时间直到它超时)
  • 如果应用程序没有在预先配置的时间段内删除消息,SQS 会使消息重新出现 到队列
  • 如果从队列中检索消息的次数超过预先配置的次数,则可以将该消息移动到死信队列

无法获取有关特定消息的信息。相反,应用程序会请求一条消息(或一批消息),然后消息变得不可见(或 'in flight')。这也可以访问可与 DeleteMessageChangeMessageVisibility.

一起使用的 ReceiptHandle

最接近的选择是致电 GetQueueAttributesApproximateNumberOfMessagesNotVisible 的值将指示 正在发送的消息的数量 但它不会提供对 特定 消息的洞察力。