MyProject.Core
MyProject.Services.DataImporter
Myproject.Services.Cars
Myproject.Services.Cars2
DataImporter
和Cars
项目均引用MyProject.Core项目。我有一个由DataImportFinishedEvent
服务发出的事件(DataImporter
)。 Services.Cars
和Services.Cars2
都订阅了此事件。
当事件被触发时,我可以在Services.Cars
中获取此事件,并且在处理事件之后,我无法在Services.Cars2
中获取它。如果禁用Services.Cars
,则可以成功获取Services.Cars2
上的事件。
简而言之,一个事件我不能有多个订阅者,一旦事件被处理,就好像其他使用者不再存在。
不确定我应该共享什么代码,但是我的事件和事件处理程序看起来像这样。
public class DataImportFinishedEvent: Event
{
public string Data { get; set; }
}
public class DataImportFinishedEventHandler : IEventHandler<DataImportFinishedEvent> {
public Task Handle(DataImportFinishedEvent @event)
{
return Task.FromResult(true);
}
}
如果您需要更多信息,请在两个服务(.net核心)中注入RabbitMQBus实现
services.AddSingleton<IEventBus, RabbitMQBus>(sp =>
{
var scopeFactory = sp.GetRequiredService<IServiceScopeFactory>();
return new RabbitMQBus(sp.GetService<IMediator>(), scopeFactory);
});
[请让我知道是否需要RabbitMQBus
实现的更多信息。
当您在RabbitMQ的队列中上载消息时,该消息将仅被使用一次。
为了获得同一条消息要由多个使用者使用,您必须使用fan-out exchange