spring-boot - 多实例服务上的事件驱动架构

标签 spring-boot microservices event-driven event-driven-design

我们在项目中使用微服务架构。我们使用 Kubernetes 将每个服务部署到集群。服务使用Java编程语言和Spring Boot框架开发。每个服务存在三个副本。服务仅使用事件来相互通信。 RabbitMQ 用作消息队列。其中一项服务用于发送电子邮件。电子邮件的详细信息由另一个带有事件的服务提供。当服务发布 SendingEmail 事件时,电子邮件服务的三个副本会消耗该事件,并且同一封电子邮件会发送三次。 如何防止其他两个服务发送电子邮件?

最佳答案

我认为这取决于您如何使用 Rabbit MQ。

您可以为rabbit mq配置一个队列来处理这些事件,并使代表发送服务器的Spring Boot应用程序成为“竞争”消费者。

如果你这样配置,一次只有一个副本会收到一个事件,并且只有当它无法处理该事件时,消息才会返回到队列并可供其他消费者使用。

根据您的描述,所有这些都在获取消息,因此它的工作方式类似于发布-订阅(这也是使用rabbit mq的一种可能的方式,但在这种情况下它并不好)。

关于spring-boot - 多实例服务上的事件驱动架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56742490/

相关文章:

javascript - Google Maps API - 透明传递地址组件

spring - 如何在 Spring Boot 服务应用程序中的 REST 服务调用之间按原样传递请求参数?

Python Turtle mainloop() 用法

reactive-programming - The Reactive Manifesto 中的事件驱动架构和消息驱动架构到底有什么区别?

node.js - RabbitMQ 和 Sails.js

java - 无法使用 MongoDb GridFs 上传文件

java - 冲突的模块。 LoggerFactory 不是 Logback LoggerContext 但 Logback 在类路径上

docker - 在kubernetes上的Lagom中部署微服务的版本控制

spring-boot - 使用 MyBatis Annotation Spring Boot 检索生成的 ID

java - 微服务路径/api/v1/或/v1/api/