具有同一应用程序多个实例的 Amazon SNS 主题

Amazon SNS topic with multiple instances of same application

我目前在考虑使用 SNS 来解耦某些应用程序的事件驱动架构时遇到问题。

想象一个 SNS 主题,我有应用程序 A 向它生成消息,应用程序 B 将侦听和使用来自该主题的消息。

此应用程序 B 附加了一个自动缩放组,因此它可以缩放到多个实例。当应用程序 B 扩展时,SNS 将如何处理?如果现在我有 2 个应用程序 B 的实例,SNS 会为所有这些实例发送消息,或者它可以意识到它们是同一个应用程序并只将消息发送给其中一个?

我不确定你想要的结果是什么,所以我把答案分成两部分:

a) 您只想处理每条消息一次: 这种情况下的一个常见模式是将一个 SQS 队列订阅到 SNS 主题,然后让 N 个应用程序服务器从这个队列中轮询。这样,您就可以确保每条消息只处理一次。

b) 您想在每个服务器上处理每条消息一次: 在这种情况下,您可以为每个服务器创建一个 SNS 主题订阅。发布到主题的每条消息将被传递到每个订阅一次。

SNS 视为无线电广播:收听的每个人都会收到您的信息。这意味着您订阅的每个服务器都会收到通知。

另一方面,

SQS 更像是待办事项列表。许多订阅者也可以收听,但每条消息都分发给at least someone。这意味着通常只有一台服务器会被触发。 如果这更适合您,那么您可以考虑使用 SQS 而不是 SNS。