【发布时间】:2016-07-21 00:41:34
【问题描述】:
【问题讨论】:
-
你问的是队列中可以放置的最大消息数,还是
ReceiveMessage可以调用的最大次数? -
@JohnRotenstein:是的,我需要 ReceiveMessage 可以调用的最大次数..
标签: amazon-web-services message-queue amazon-sqs
【问题讨论】:
ReceiveMessage可以调用的最大次数?
标签: amazon-web-services message-queue amazon-sqs
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。
在性能良好的应用程序中,您通常不希望消息被接收数百或数千次,但在有问题的应用程序中,您不希望在发现问题之前丢失消息,因此在可以证明之前我所做的假设是没有硬性限制。
您的代码还可以检查ApproximateReceiveCountattribute 的值,以了解如果您想以某种方式处理值超过某个阈值的消息,则该消息已传递了多少次。这个计数器确实包括消息在控制台的“查看消息”中被枚举的次数,因为控制台接收消息然后重置它们的可见性超时,就像应用程序一样。
如果要使用此值,请注意 SQS 消息同时具有“属性”(系统)和“消息属性”(用户定义)。
【讨论】: