针对SQS的Amazon SNS交付重试策略

时间:2015-06-10 07:38:42

标签: amazon-web-services amazon-sqs amazon-sns

我们正在使用具有多个SQS队列订阅者的SNS主题实施AWS扇出模式。我想知道如果我成功地在SNS主题上发布消息会发生什么,但是由于某种原因它无法将其转发到队列中。 SNS会重试,如果有的话,有没有办法控制它。

我发现此页面http://docs.aws.amazon.com/sns/latest/dg/DeliveryPolicies.html涉及为SNS HTTP / HTTPS端点配置重试策略,但SQS上没有任何内容。

4 个答案:

答案 0 :(得分:7)

我是SNS开发团队的成员。对于SQS交付,SNS将在放弃之前重试数千次。除了灾难性的多日中断外,SQS的消息传递得到保证。

答案 1 :(得分:3)

SQS和SNS是2013年和2014年的一支团队,当时我是该团队的开发人员。正如George Lin指出的那样,负责交付的SNS后端会为SQS队列重试数千次(确切的数量是100,000次但可能已经改变)。存在隐含的退避政策。在第一次尝试中,将在非常紧密的循环中进行几千次重试,没有延迟。如果失败了,那么随着时间的推移逐渐尝试交付的政策就会退出。一般来说,向SQS端点的交付很少会失败。

答案 2 :(得分:2)

AWS保证向SQS发送,因此您无需担心:

  

问:Amazon SNS会保证邮件会传递到订阅的终端吗?

     

当消息发布到主题时,Amazon SNS将尝试   向所有为该主题注册的订户发送通知。   由于潜在的互联网问题或电子邮件传递限制,   有时,通知可能无法成功到达HTTP或电子邮件   终点。在HTTP的情况下,可以使用SNS传递策略   控制重试模式(线性,几何,指数退避),   最大和最小重试延迟以及其他参数。 如果是的话   关键是要成功处理所有已发布的消息,   开发人员应该将通知发送到SQS队列 (in   除了通过其他传输的通知)。

http://aws.amazon.com/sns/faqs/

答案 3 :(得分:2)

实际上,AWS保证从SNS向SQS传递消息。由于问题引用如下,我想指出向SQS交付失败的原因。

  

我想知道如果我成功发布消息会发生什么   在SNS主题上,但它失败(由于某种原因)将其转发到队列。

只有当我们指向的SQS被某个进程删除(或被删除)时才会发生这种情况。从SNS Faqs开始,如果SQS不可用,它将重试多次尝试,直到消息被丢弃。

  

SQS:如果SQS队列不可用,SNS将重试10次   立即,然后每20秒共计100,000次   消息发布前超过23天的100,010次尝试   从SNS丢弃。

@grigori在评论中指出了这一点。