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

roa*_*ark 4 amazon-sqs amazon-web-services

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

Joh*_*ein 10

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

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

无法获得有关特定消息的信息。相反,应用程序请求一条消息(或一批消息),消息在此之后变得不可见(或“在飞行中”)。这也可以访问ReceiptHandle可以与DeleteMessage或一起使用的ChangeMessageVisibility

最接近的选择是调用GetQueueAttributes. 的值ApproximateNumberOfMessagesNotVisible将指示传输中消息数量,但不会深入了解特定消息。