这SNS 文档常见问题解答说:
SNS 为收到的所有消息提供持久存储。收到发布请求后,SNS 会在多个可用区中存储该消息的多个副本(到磁盘),然后再向发送者确认收到该请求。每个 AWS 区域都有多个隔离位置,称为可用区。虽然这种情况很少见,但如果一个区域发生故障,SNS 的运行和消息的持久性仍会继续,不会中断。
和
如果成功处理所有已发布的消息至关重要,则开发人员应该将通知传递到 SQS 队列(除了通过其他传输方式发送通知)。
我从理论层面很好奇,是否有人知道什么情况会导致 SNS 发布和接受的消息“丢失”,特别是在使用 SQS 消费者时,即消息永远不会传递给 SQS 订阅者。
答案1
同样来自SNS 常见问题解答:
SQS:如果 SQS 队列不可用,SNS 将立即重试 10 次,然后每 20 秒重试 100,000 次,总共重试 100,010 次,超过 23 天,然后消息将从 SNS 丢弃。
因此,我认为使用 SQS 使用者时,消息丢失主要有三种情况:
- SQS 持续不可用 - 超过 23 天
- SNS 本身或底层存储技术中存在异常软件错误,导致消息被删除或丢失
- 灾难性区域故障,即该 SNS 实例使用的所有底层存储系统同时发生终端丢失 - 可能只有影响整个地理区域的重大、大规模灾难,即地震、洪水、大型陨石、重大爆炸事件