SNS为接收到的所有消息提供持久存储。收到发布请求后,SNS将消息的多个副本(到磁盘)存储在多个可用区域中,然后再确认发送给发送者的请求。每个AWS区域都有多个隔离的位置,称为可用区。尽管很少见,但如果在一个区域中发生故障,SNS的运行和消息的持久性将继续而不会受到干扰。
和
如果必须成功处理所有已发布的消息,那么开发人员应该将通知传递到SQS队列(除了通过其他传输的通知之外)。
我在理论上很好奇,是否有人知道会导致消息被SNS接受的任何条件(即API响应成功代码,导致消费者认为该消息已被成功接受), “丢失”,特别是在使用订阅了队列的SQS使用者时,即消息没有(也永远不会)传递给SQS订户。
脚注:大约一个月前,我确实在server fault提出了同样的问题,但可悲的是没有得到任何关注。如果这个问题的构想很糟,那么最好知道如何改善它。
答案 0 :(得分:0)
亚马逊是否保证从SNS到SQS的传输不会丢失任何消息?
如果您使用AWS内置的订阅功能(而不是编写自己的代码来传输消息),答案是是-所有消息都将成功发送到SQS。
问:Amazon SNS是否保证消息传递到订阅的终端节点?
... 如果必须成功处理所有已发布的消息,那么开发人员应该将通知传递到SQS队列(除了通过其他传输的通知之外)。
此处的含义是,您应该将通知传递到SQS队列,因为这是确保所有消息都得到处理的唯一保证方式。