我正在开展一个项目,我打算使用an Amazon SQS Delay Queue。
我在理解“机上”消息的确切含义时遇到了一些麻烦。
文档中有一条说明:
注意
每个机上信息的数量限制为120,000 队列。收到邮件后,邮件会在空中播出 队列,但尚未从队列中删除。如果你达到了 120,000限制,您将收到来自亚马逊的OverLimit错误消息 SQS。为了避免达到限制,您应该删除邮件 处理后从队列中。你也可以增加 用于处理消息的队列数。
但我不完全确定被队列收到的是什么。在流程图中,队列“收到”消息在哪里?
我会故意延迟许多消息(在图表的第一个蓝色条中),但在“可见性超时”阶段(第二个蓝色条)不会很多。
这两个蓝条都算作“机上”消息吗?或者只是在ReceiveMessage
请求“收到”消息之后(在图表底部的“消息返回”右侧)消息才会“飞行”?
答案 0 :(得分:9)
放入延迟队列的邮件不会立即计为“在飞行中”,因为它们对任何使用者都是不可见的。它们不算作“可用”或“飞行中”,它们对您来说是不可见的。
您可以通过AWS SQS控制台上的简单实验验证这一点:
正如文档所述,消息在收到后(在某些应用程序处理时)在“飞行中”,但在删除之前。如果在应用程序完成它们时未删除它们,则它们将返回“可用”状态。
您可以在AWS SQS控制台上使用第二个实验验证这一点:
由于您的“In Flight”消息是您的应用程序当前正在处理的消息,因此该列中的队列消息深度实际上不会变得非常大。处理完后删除你的邮件(或者重试 - >正确处理然后删除/移动到另一个队列来处理异常)你应该没问题。