将 Amazon SQS 用于接收相同消息的多个消费者
Using Amazon SQS for multiple consumers receiving the same message
我有一个主要应用程序向 SQS 队列发送消息,并希望 4 个消费者应用程序使用相同的消息并按他们想要的方式处理它
我不确定为此目的使用什么队列架构。
我看到了标准选项 SQS、SQS FIFO、(SQS + SNSTopic) & Kenesis
对于我想要的功能,似乎 (SQS + SNS Topic) 或 Kenesis 都是可行的方法。
但我还有一个关于标准 SQS 和 SQS FIFO 的问题 - 如果我使用 SQS FIFO 或标准 SQS,是否所有的消费者都不可能收到相同的消息?
我想我对所有选项感到困惑,对队列上可用的所有信息不知所措,但仍然对选择哪种架构感到困惑
信息的主要来源是 Amazon 文档和 https://www.schibsted.pl/blog/choosing-best-aws-messaging-service/
我在 Whosebug 上遇到的一些问题:
这 post 回答了使用队列使用多个消费者的问题,但不确定它是否解决了多个消费者使用相同消息的问题
Link_2
这回答了为什么 Kenesis 可以用于我的场景
Helpful_Info我用这篇文章只是为了了解差异
我真的很感激在这方面的帮助。我正在尝试尽可能多地阅读,但如果有人能帮助我做出正确的决定,我将不胜感激
根据您的用例,SNS 似乎是一个不错的选择,但是如果您想保留消息,您可以将 SQS 与 SNS 结合使用。
这看起来像是 SNS-SQS fanout notifications 的完美用例 - 消息被发送到 SNS "topic",SNS 会将其传送到 "subscribed" 的多个 SQS 队列主题。
一些注意事项:
- 每个消费者应用程序(附加到队列)将以自己的速率消费 - 这意味着一个或多个消费者应用程序 "fall behind" 是可能的。一般来说,只要消费者是独立的,那应该没问题 - 队列充当缓冲区,因此不会丢失任何信息。
- 如果你需要它们同步,那是行不通的——你应该只使用一个队列,一个进程来同步轮询队列并传递给每个应用程序的消息。
- 您可以使用 Kinesis 执行类似的逻辑(它是为多个消费者构建的),但额外的开发复杂性和成本通常不值得,除非您要处理非常大的消息量
- Kinesis 按数据量(兆字节)计费,而 SQS 按消息数计费 - 计算您的用例。
不必担心 SQS FIFO,除非您需要它提供的有关排序的保证。 Plain SQS 已经大致排序,足以满足大多数用例。
我有一个主要应用程序向 SQS 队列发送消息,并希望 4 个消费者应用程序使用相同的消息并按他们想要的方式处理它
我不确定为此目的使用什么队列架构。
我看到了标准选项 SQS、SQS FIFO、(SQS + SNSTopic) & Kenesis
对于我想要的功能,似乎 (SQS + SNS Topic) 或 Kenesis 都是可行的方法。
但我还有一个关于标准 SQS 和 SQS FIFO 的问题 - 如果我使用 SQS FIFO 或标准 SQS,是否所有的消费者都不可能收到相同的消息?
我想我对所有选项感到困惑,对队列上可用的所有信息不知所措,但仍然对选择哪种架构感到困惑
信息的主要来源是 Amazon 文档和 https://www.schibsted.pl/blog/choosing-best-aws-messaging-service/
我在 Whosebug 上遇到的一些问题:
Link_2 这回答了为什么 Kenesis 可以用于我的场景
Helpful_Info我用这篇文章只是为了了解差异
我真的很感激在这方面的帮助。我正在尝试尽可能多地阅读,但如果有人能帮助我做出正确的决定,我将不胜感激
根据您的用例,SNS 似乎是一个不错的选择,但是如果您想保留消息,您可以将 SQS 与 SNS 结合使用。
这看起来像是 SNS-SQS fanout notifications 的完美用例 - 消息被发送到 SNS "topic",SNS 会将其传送到 "subscribed" 的多个 SQS 队列主题。
一些注意事项:
- 每个消费者应用程序(附加到队列)将以自己的速率消费 - 这意味着一个或多个消费者应用程序 "fall behind" 是可能的。一般来说,只要消费者是独立的,那应该没问题 - 队列充当缓冲区,因此不会丢失任何信息。
- 如果你需要它们同步,那是行不通的——你应该只使用一个队列,一个进程来同步轮询队列并传递给每个应用程序的消息。
- 您可以使用 Kinesis 执行类似的逻辑(它是为多个消费者构建的),但额外的开发复杂性和成本通常不值得,除非您要处理非常大的消息量
- Kinesis 按数据量(兆字节)计费,而 SQS 按消息数计费 - 计算您的用例。
不必担心 SQS FIFO,除非您需要它提供的有关排序的保证。 Plain SQS 已经大致排序,足以满足大多数用例。