我想在那里只有200封邮件。
所有其他人都应该转移到死信队列。
由于依赖其他服务,我们无法处理更多邮件。
答案 0 :(得分:2)
我认为不可能限制队列中的消息数量。您可以设置队列中消息大小的限制,但不能设置消息数量。
答案 1 :(得分:2)
您绝对不能限制队列中的邮件数量。
您申请的性质是什么?如果我们更多地了解您需要限制队列大小的原因,也许有更好的解决方案......
答案 2 :(得分:2)
SQS没有这样的限制功能。
所以不要试图在SQS级别上这样做。相反,当您从队列中提取消息时,请实施此限制逻辑。
跟踪从队列中提取的消息并发送到第三方服务。一旦达到极限(20?),然后垃圾消息。
答案 3 :(得分:0)
<强>更新强>:
如果您没有设置延迟的展示次数,则可以在允许邮件通过之前通过cloudwatch API致电ApproximateNumberOfMessagesVisible
。
可从队列中检索的消息数。
单位:计数
有效统计:平均
如果您的可见度延迟大于0
,则可以执行两次检查,第二次检查ApproximateNumberOfMessagesNotVisible
。
如果此解决方案不起作用,是的,这似乎有点多,但您可以在NumberOfMessagesDeleted
和NumberOfMessagesSent
上进行调用,并获取仍在队列中的消息数。
所以(伪)&#34;代码&#34; 看起来像:
if (ApproximateNumberOfMessagesVisible < 200)
//Send message
//OR
var x = NumberOfMessagesSent - NumberOfMessagesDeleted;
if (x < 200)
//Send message
HERE是上述调用的文档
信息检查?
再看一下,我不相信下面的配置会解决这个问题。我将把它留在答案中,直到确认不正确为止。
我认为在设置过程中可以通过调整Dead Letter Queue Settings
在SQS设置中,您会看到:Use Redrive Policy
表示:
超过最大接收数后,将消息发送到死信队列。
就在下面:Maximum Receives
表示:
在将消息发送到死信队列之前可以接收的最大次数。
此设置应将所有溢出发送到作为可选值的辅助队列。换句话说,您可以Redrive Policy
留空Dead Letter Queue
,Maximum Receives
设置为200