当前位置: 首页 > 知识库问答 >
问题:

将事件发布到单个微服务实例

阙星渊
2023-03-14

我正在做一个项目,它有几个事件驱动的微服务,并且还使用Kubernetes进行负载平衡。所有的服务都是发布者和侦听者。当一个微服务发布一个事件时,所有的侦听器都在捕获该事件(如果它侦听了那个特定的事件)并完成它们的工作。在此之前,此流没有任何问题:

假设我有一个负责发送电子邮件的微服务。并且此服务由于负载高而被负载均衡器重复2次。现在我们有3个电子邮件服务实例。当发布“Sendmail”事件时,所有3个实例都会捕获该事件并为它们自己发送电子邮件。在一天结束时,正在发送3封电子邮件。

微服务:A、B、C

负载均衡器复制:A1,A2,A3,B1...

案例1:我想为所有服务的实例发布一个事件。

applicationContext().publishEvent(
        new customEvent(
                this,  // Source
                busProperties().getId(),  // Origin Service
                null  // Destination Service (null: all)
        )
);

事件侦听器;

@Component
public class Listener implements ApplicationListener<CustomEvent> {
    @Override
    public void onApplicationEvent(CustomEvent event) {
        Foo();
    }
}

共有1个答案

邵飞白
2023-03-14

我现在更明白了,这里是我之前贴的图像链接。我肯定你已经知道这件事了。这是一个常见的问题,最好的方法是使用redis作为“阻塞”机制。由于消息队列异步地向所有使用者发送请求,我们将不知道谁在接收和处理请求,但我们可以通过使用阻塞来确保它不会被所有人处理。在执行任何操作之前,检查块,如果它不存在,则处理请求。

 类似资料:
  • REST服务器可以配置为订阅从已部署的业务网络发出的事件,并发布这些业务事件供客户端应用程序使用。目前,REST服务器支持通过WebSockets向客户端应用程序发布事件。 客户端应用程序可以使用WebSocket客户端来订阅由REST服务器发布的业务事件。WebSocket客户端可用于所有主要编程语言和应用程序类型,例如客户端Web用户界面、后端服务器进程、移动应用程序和集成工具。 启用WebS

  • 我有两个微服务和调用来更新数据,然后插入另一个数据,但让我们考虑一下 失败,然后我们需要回滚由 更新的数据,否则我们将处于不一致的状态。 我也经历了佐贺patterns.will它满足了这种矛盾 谁能为此提出更好的解决方案?

  • 最近在学微服务的分布式事务,不太明白为什么在微服务这种分布式系统中,原有的单体acid会出现问题 希望大佬们可以讲一下原理和思想

  • : 和 : 根据我找到的一些建议,我尝试从我的eureka服务器中隐藏网关,但问题仍然存在,将其添加到网关中的中:

  • 我有一个文件,我需要部署到现有的应用服务(已经包含一个应用程序,以前通过另一个管道部署)。 我想避免使用FTP任务。 有没有办法通过DevOps管道将单个文件部署到应用程序服务中的特定文件夹?

  • 我试图通过Spring Boot向RESTAPI发送一个字符串,但我一直收到400:错误的请求。我通过postman检查了这个json是否被API接受: 我编写了以下代码发布到此服务: 货币枚举如下所示: 我尝试将其作为枚举值和字符串值发送,但均无效。