SQS的delay queues可以在邮件传递之前添加延迟。但是,他们对“飞行中”消息的总数有120,000上限。当客户端收到OverLimit错误时,文档建议回退到另一个队列。
有没有办法通过客户端发布到连接到多个SQS延迟队列的单个SNS主题自动回退到另一个队列?通过这种方式,我的意思是消息通常会从SNS推送到具有“飞行”容量的SQS队列之一。
答案 0 :(得分:4)
你真的担心超过120,000'在飞行中'消息,或者您是否可能会混淆最大队列大小? (其中没有)。
队列中可以拥有的消息数没有限制,120,000限制与队列消费者请求消息消耗的消息数有关,但这些消息尚未处理/删除?
这是飞行中的定义'来自AWS:
收到邮件后,邮件会在空中播出 由消耗组件排队,但尚未从中删除 队列。如果达到120,000限制,您将收到OverLimit 来自Amazon SQS的错误消息。为了帮助避免达到极限,你 应该删除队列中的消息 处理。您还可以增加用于的队列数 处理消息。
这是一个确认队列大小本身没有限制的链接:
问:亚马逊SQS队列有多大?
A:单个队列可能包含无限数量的消息,而您 可以创建无限数量的队列。
http://aws.amazon.com/sqs/faqs/#How_big_can_Amazon_SQS_queues_be
如果你不混淆这两个问题,我提前道歉 - 如果是这样的话,你真的在谈论超过120K'机上'限制,我将删除我的帖子。
顺便说一句,找到了这个问题/答案,它会向你确认,因为邮件在延迟队列中,它们不在飞行中':
答案 1 :(得分:0)
在这种情况下使用SNS不会有帮助,因为发布到SNS主题的消息副本将传递给每个SQS订阅。
可能会有所帮助的一些指示:
使用死信队列存储失败: http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSDeadLetterQueue.html
使用Apache Camel通过SQS配置路由和附加功能: http://camel.apache.org/aws-sqs.html
另外,请确保您了解@ E.J中指出的差异。布伦南回答。