延迟队列消息在SQS中是否算作“飞行中”?

时间:2014-02-19 21:34:14

标签: amazon-web-services queue delay amazon-sqs

我正在开展一个项目,我打算使用an Amazon SQS Delay Queue

我在理解“机上”消息的确切含义时遇到了一些麻烦。

文档中有一条说明:

  

注意

     

每个机上信息的数量限制为120,000   队列。收到邮件后,邮件会在空中播出   队列,但尚未从队列中删除。如果你达到了   120,000限制,您将收到来自亚马逊的OverLimit错误消息   SQS。为了避免达到限制,您应该删除邮件   处理后从队列中。你也可以增加   用于处理消息的队列数。

但我不完全确定被队列收到的是什么。在流程图中,队列“收到”消息在哪里?

enter image description here

我会故意延迟许多消息(在图表的第一个蓝色条中),但在“可见性超时”阶段(第二个蓝色条)不会很多。

这两个蓝条都算作“机上”消息吗?或者只是在ReceiveMessage请求“收到”消息之后(在图表底部的“消息返回”右侧)消息才会“飞行”?

1 个答案:

答案 0 :(得分:9)

放入延迟队列的邮件不会立即计为“在飞行中”,因为它们对任何使用者都是不可见的。它们不算作“可用”或“飞行中”,它们对您来说是不可见的。

您可以通过AWS SQS控制台上的简单实验验证这一点:

  • 创建延迟队列,并为SQS控制台打开两个选项卡。
  • 通过右键单击队列并选择“发送消息”将几条消息放入延迟队列 - 您应该注意到这些消息在延迟到期之前不会被计为“可用”或“在飞行中”,在此期间他们变得“可用”。

正如文档所述,消息在收到后(在某些应用程序处理时)在“飞行中”,但在删除之前。如果在应用程序完成它们时未删除它们,则它们将返回“可用”状态。

您可以在AWS SQS控制台上使用第二个实验验证这一点:

  • 打开两个标签到AWS SQS控制台。在延迟队列中创建一些消息并等待它们可用。
  • 在第一个标签中,右键单击队列并选择“查看/删除邮件”。在此实验中,“查看/删除消息”对话框类似于您的应用程序 - 它正在查看队列消息时处理它。将“消息的轮询队列”文本字段设置为足够长的持续时间并开始轮询消息。如果您的消息可用,则应立即显示。
  • 在第二个选项卡中,刷新SQS控制台。您应该注意到这些消息现在是“在飞行中”,因为在您在其他选项卡中查看消息时已收到消息。

由于您的“In Flight”消息是您的应用程序当前正在处理的消息,因此该列中的队列消息深度实际上不会变得非常大。处理完后删除你的邮件(或者重试 - >正确处理然后删除/移动到另一个队列来处理异常)你应该没问题。