SQS标准队列的运行中消息的最大最大数量约为120'000。达到此限制后,将返回OverLimit
错误消息。 1
但在这种情况下,不会为FIFO队列返回任何错误消息(限制为20'000飞行中消息)。 1
为什么会这样?
答案 0 :(得分:1)
除了“这是一个体系结构的决定”之外,我认为这里没有客观的答案。
运行中的限制实际上是您永远都不会遇到的-它仅适用于已交付给使用者,未删除以及过去可见性超时的消息。
OverLimit错误仅适用于接收消息-不发送它们。在这种状态下,您仍然可以将消息发送到任何一种队列,只是无法接收它们。
大概,FIFO将其视为普通的“无可用消息”情况,以便使用者能够像正常情况一样继续长时间轮询,而不是看到异常,这会增加FIFO队列上的工作量-{ {3}}不适用于非FIFO队列。 300 trx / sec的限制包括发送,接收和/或删除的任意组合,每个事务最多可批处理10条消息,这似乎是与协调一次准确有序交付所需的开销有关的限制。您不希望使用者看到异常,通过在发生错误的情况下不断重试来增加FIFO队列的工作量(并降低吞吐量)(如20K的运行中消息所证明的那样)。