在 SQS 中,对于单个消息,ReceiveMessage 的最大数量是多少?可以放置在队列的最长保留期限内的请求?
我搜索了很多,但找不到 Max Cap 的任何数字。
是无限的吗?
最佳答案
message lifecycle的文档中没有提到限制,只有当队列的最长消息保留时间(默认为 4 天,最长 14 天)到期时才会删除消息。
在那之前它似乎基本上是无限的,除非您将队列配置为在可配置的最大接收数之后将消息移动到单独的“死信队列”......在这种情况下,允许的最大接收数 -包括在控制台中查看队列消息时特定消息弹出的次数 -- 是 1000。(当然,最小值是 1)。
见:Using Amazon SQS Dead Letter Queues
似乎没有记录可以接收消息的最大次数限制,否则,但是还有另一个限制会限制重复接收消息的队列,并且它们的可见性超时重复允许过期(导致它们再次恢复可见)——每个队列都支持队列中无限数量的消息,但每个队列 is limited to 120,000 messages in flight at any one time (等待他们的可见性超时到期)。
否则,给定消息的最大接收次数似乎仅受最大消息保留时间乘以可见性超时的限制。如果默认值为 4 天 30 秒,则为 4 × 24 × 60 × (60 ÷ 30) = 11,520。
在行为良好的应用程序中,您通常不希望消息被接收成百上千次,但在有缺陷的应用程序中,您不希望消息在发现问题之前丢失,因此我做出的假设除非可以证明,否则没有硬性限制。
您的代码还可以检查 ApproximateReceiveCount
的值attribute如果您想以某种方式处理值超过特定阈值的消息,则可以了解消息已传递的次数。这个计数器确实包括消息在控制台的“查看消息”中被枚举的次数,因为控制台接收消息然后重置它们的可见性超时,就像应用程序一样。
如果要使用此值,请注意 SQS 消息同时具有“属性”(系统)和“消息属性”(用户定义)。
关于amazon-web-services - SQS中一条消息的最大ReceiveMessage请求数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36352409/