gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 03:30:47 26 4
gpt4 key购买 nike

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

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

我的问题是,我能否配置一个允许我为两种场景发布事件的云总线。我想对一个事件说“当一个听众捕获你时,消失”或“去那里等待的每个听众”。

例如;

微服务:A、B、C

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

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

案例 2:我想为服务 A 实例发布一个事件。

案例 3:我想为 A 的单个实例发布一个事件(不要关心哪个)。

我试过了;为事件提供目的地,但所有实例都具有相同的总线名称,因为它们被复制为相同的。如果我给出/知道单个实例总线名称,我就不会使用它,因为那个 pod 可能会死掉。

事件发布;

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();
}
}

最佳答案

我现在明白了,这是Image Link我之前发过。我相信你已经知道了。这是一个常见问题,最好的方法是使用 redis 作为“blocking”机制。由于消息队列向所有消费者异步发送请求,我们不知道谁在接收和处理请求,但我们通过使用阻塞确保它不会被所有人处理。在进行任何操作之前,检查 block ,如果不存在,则处理请求。

关于java - 将事件发布到单个微服务实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57603596/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com