我正在进行一个项目,我打算在其中使用一个Amazon延迟队列。
我有点难以理解“飞行”信息的确切含义。
文件中有一条注释说:
Note 每个队列的inflight消息数量有12万条限制。消息已被队列接收,但尚未从队列中删除。如果达到120,000的限制,您将收到来自Amazon的OverLimit错误消息。为了避免达到限制,您应该在消息处理完后从队列中删除它们。还可以增加用于处理消息的队列数。
但我不完全确定什么被认为是“被队列接收”。在流程图中,队列“接收”消息在哪里?

我将有很多消息故意延迟(在图的第一个蓝色条中),但在“可见性超时”阶段(第二个蓝色条)中不多。
这两个蓝色的条形是否都算作“飞行”信息?还是一条消息被ReceiveMessage请求“接收”后(在图表底部的“消息返回”的右边)仅是"inflight“?
发布于 2014-02-19 22:03:25
被丢弃到延迟队列中的消息不会立即被计算为“在飞行中”,因为它们对任何消费者都是不可见的。它们不算“可用”或“飞行中”,只是你看不见而已。
您可以在AWS SQS控制台上进行一个简单的实验来验证这一点:
如文档所述,消息在收到后(在被某些应用程序处理时),但在被删除之前“处于飞行中”。如果它们在应用程序完成后没有被删除,它们将返回到“可用”状态。
您可以在AWS SQS控制台上进行第二个实验来验证这一点:
因为您的“在飞行”消息是您的应用程序目前正在处理的消息,所以该列中的队列消息深度不应该实际增长很大。在处理消息后删除它们(或重试->适当处理,然后删除/移动到另一个队列以处理异常),您应该会没事的。
https://stackoverflow.com/questions/21892950
复制相似问题