我们在项目中使用微服务架构。我们使用 Kubernetes 将每个服务部署到集群。服务使用Java编程语言和Spring Boot框架开发。每个服务存在三个副本。服务仅使用事件来相互通信。 RabbitMQ 用作消息队列。其中一项服务用于发送电子邮件。电子邮件的详细信息由另一个带有事件的服务提供。当服务发布 SendingEmail 事件时,电子邮件服务的三个副本会消耗该事件,并且同一封电子邮件会发送三次。 如何防止其他两个服务发送电子邮件?
最佳答案
我认为这取决于您如何使用 Rabbit MQ。
您可以为rabbit mq配置一个队列来处理这些事件,并使代表发送服务器的Spring Boot应用程序成为“竞争”消费者。
如果你这样配置,一次只有一个副本会收到一个事件,并且只有当它无法处理该事件时,消息才会返回到队列并可供其他消费者使用。
根据您的描述,所有这些都在获取消息,因此它的工作方式类似于发布-订阅(这也是使用rabbit mq的一种可能的方式,但在这种情况下它并不好)。
关于spring-boot - 多实例服务上的事件驱动架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56742490/