MASA.Framework icon indicating copy to clipboard operation
MASA.Framework copied to clipboard

事件总线细化

Open magiboys opened this issue 2 years ago • 6 comments

我有一个事件继承IIntegrationDomainEvent,当我使用IEventBus时希望只在当前进程发布事件,建议如IIntegrationEventBus一样,新构建一个ILocalEventBus,他只会在本地发布事件。 需求场景,我在web api接收这个集成事件时,不会做业务处理,希望发布成本地事件,在业务层处理,我现在只能新建一个属性一样的类,使他只继承Event来实现,这有点冗余

magiboys avatar Oct 07 '23 06:10 magiboys

IEventBus 就是你说的ILocalEventBus,你的需求场景是想同一个事件,支持集成事件和本地事件,发送那种自己选择?

MayueCif avatar Oct 12 '23 02:10 MayueCif

IEventBus 就是你说的ILocalEventBus,你的需求场景是想同一个事件,支持集成事件和本地事件,发送那种自己选择? 对的,我看了IEventBus的实现,如果继承了集成事件接口会发布集成事件,但是我只想发布本地事件

magiboys avatar Oct 13 '23 01:10 magiboys

你先定义一个本地事件,在继承本地事件定义继承时间不就可以避免冗余了吗

MayueCif avatar Oct 13 '23 05:10 MayueCif

重复定义一个事件继承不就是冗余,而且本地事件总线和集成事件总线分离,更方便开发者自己控制

magiboys avatar Oct 26 '23 06:10 magiboys

你先定义一个本地事件,在继承本地事件定义继承时间不就可以避免冗余了吗

在官网的示例中,我发布一个集成领域事件,先在Contracts层(默认没有引用Masa.BuildingBlocks.Ddd.Domain)定义集成事件UserNameChangedntegrationEvent(Contracts类,能被其他微服务直接引用),然后在领域层定义UserNameChangedDomainEvent(领域层类,不能被其他微服务直接引用)继承UserNameChangedntegrationEvent和实现IIntegrationDomainEvent, 发布的时候发布UserNameChangedDomainEvent, 订阅的时候UserNameChangedntegrationEvent接收,但是dapr一个服务只能一个在一个地方订阅,现在我这个服务有多个地方都要处理这个事件(他们逻辑是单独的,比如一个更新A表,一个更新B表)。 所以我想用IEventBus 发布一个只在当前服务本地处理的UserNameChangedntegrationEvent事件,现在是实现不了的,因为IEventBus 发布时会判断这个事件如果是ntegrationEvent,又会发布成集成事件,造成死循环. 所以现在的处理方案是复制一个属性一模一样的UserNameChangedEvent事件(默认普通Event定义在领域层而不是Contracts层)发布,然后在A表Handler和B表Hanlder分别处理。 而且如果我有另一个微服务也要这样处理的话,要在每个微服务中复制一个UserNameChangedEvent事件(因为普通Event定义在领域层) 现在的冗余就是,我一个集成事件处理,至少要定义三个类,而且每个不同服务要重复定义

magiboys avatar Dec 13 '23 15:12 magiboys

@MayueCif

magiboys avatar Dec 13 '23 15:12 magiboys