我们正在引入SNS + SQS来处理我们的微服务体系结构中的事件产生和传播,到目前为止,微服务体系结构依赖于HTTPS调用来相互通信。我们正在考虑将多个SQS队列连接到一个SNS主题上。然后,运行在EC2中的lambda或服务将使用队列中的事件。
我的问题是,这些主题应该有多一般?我们什么时候应该创造新的话题?
比如说,我们有一个用户域,需要发布两个事件--创建和删除。我们正在考虑的两个选择是:
选项A:有两个主题,“用户创建的”和“用户删除的”。每个主题都保证单个事件类型.
消费者不必担心放弃他们不感兴趣的事件,因为他们已经知道来自“用户创建的”主题的消息只与用户creations.
有关。
选项B:有一个主题“用户”,它接受多个事件类型
都有一个发布服务器。
有没有人对这两种选择有强烈的偏好?为什么会这样呢?
在一个相关的注意事项上,您将在哪里为每个资源包括云配置?(队列资源创建应该与使用者一起部署,还是应该独立于任何发布者/使用者?)
发布于 2020-03-21 17:59:17
我认为您应该选择B,并将与给定“域”(例如“用户”)有关的所有事件保留在一个单独的主题中:
。
关于您的另一个问题:将主题/基础结构配置与服务分开。它是一个单独的基础设施(如数据库),应该保持独立;特别是当您将更多的消费者和生产者引入您的系统时。
编辑:这可能是一个示例“安装”:
subscriptions
user-service包含服务/lambda代码,cloudformation/terraform服务模板,其主题为sns包含与sqs有关的所有cloudformation/terraform模板,包含与主题有关的所有cloudformation/terraform模板()。您可以考虑将SNS & SQS下面的代码保存在一个存储库中(最后两个存储库),但我强烈建议将特定于某个服务/lambda的所有内容保存在单独的存储库中。
一般来说,把你的主题看作一个“数据库”是有帮助的,这条思路应该能为你的所有问题指明正确的方向。
https://stackoverflow.com/questions/60789083
复制相似问题