AWS SNS:多个订阅者的情况

AWS SNS : Case of multiple subscribers

我是使用 AWS 服务的初学者。我最近有一个要求,我想将一些数据从服务 1 发送到服务 2 和服务 3。所以,我想做的是,我将从服务 1 和服务 2 和服务 3 向 SNS 推送通知此 SNS 主题的订阅者。因此,这是多个订阅者订阅同一主题并且两个订阅者都想要相同数据的情况。

我对 AWS SNS 的基本功能有一些疑问。如果有人可以提供帮助,那将非常有帮助。

  1. 假设,有 2 个通知 A,B 推送到 SNS 主题,那么两个订阅者都会收到两个通知吗?

  2. 同样的场景,2条通知什么时候从SNS话题中删除?

  3. SNS 是否将通知存储在某处?或者它只是将消息传递给订阅者?

  4. 如果其中一个订阅者失败并且无法收到某些通知,会发生什么情况?它会在再次连接到 SNS 主题时收到这些通知还是不会收到这些通知?

请回答以上部分问题。这些将真正帮助我了解 SNS 的内部工作方式。

感谢您的帮助。

发送到 SNS 主题的消息会发送给所有订阅者。

Publishers send messages to topics. Once a new message is published, Amazon SNS attempts to deliver that message to every endpoint that is subscribed to the topic. (emphasis added)

http://docs.aws.amazon.com/sns/latest/dg/PublishTopic.html

消息实际上 "deleted" 来自主题(您可能正在考虑 SQS)...但它们也不会持续存在。它们被发布了,然后就消失了。

一个明显的例外——retry policies——实际上并不是例外。在这种情况下,消息已经发布并且概念上已经脱离主题,但 SNS 仍然可以重试传递到特定目标。

SNS 所做的一切都是推送。订阅者不连接到 SNS 并请求消息。一旦消息被发布,它就被发布了。没有未来的订阅者会看到旧消息,也没有订阅者 "missed" 可以回来获取它。

但是... SNS fanout 可以将消息发送到多个 SQS 队列。在这种情况下,您将队列订阅到主题,并使用队列中的消息。每个队列都会获得每条消息的副本,并且每个队列中的一个消费者在轮询 SQS 时都会收到一份副本。

SQS 队列也是一个很好的备份临时消息保留位置。如果您将 SNS 消息发送到其他类型的端点——例如 HTTPS 或 Lambda,您也可以将消息发送到 SQS 队列,但在正常操作下,实际上不要轮询队列。消息将在 maximum message retention period 后自动从队列中清除,默认为 4 天,但最多可配置为 14 天。如果主题订阅者出现任何问题并且消息丢失,您可以从该备份队列中检索它们,否则它们最终会在超时到期时自行消失。队列中可以等待的未读消息数量没有限制。