【问题标题】:Amazon SNS topic with multiple instances of same application具有多个相同应用程序实例的 Amazon SNS 主题
【发布时间】:2021-10-15 19:27:31
【问题描述】:

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

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

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

【问题讨论】:

  • 您的用例听起来更像是 Amazon Simple Queuing Service (SQS),而不是 Amazon Simple Notification Service (SNS)。这样,每条消息仅由 一个 工作人员处理。

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 我想知道应用程序B的两个实例是否会读取主题。因为如果发生这种情况,我将不得不创建一个幂等监听器,因为它将被调用两次(因为我有两个应用程序 B 由于自动缩放而运行)
    • 如果您在启动应用的过程中调用 SNS API 创建新的 HTTP(S) 订阅,两者都会收到来自主题的通知。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多