一个事件有多个使用者(只有一个使用者正在工作)Rabbitmq

问题描述 投票:0回答:1
MyProject.Core
MyProject.Services.DataImporter
Myproject.Services.Cars
Myproject.Services.Cars2

DataImporterCars项目均引用MyProject.Core项目。我有一个由DataImportFinishedEvent服务发出的事件(DataImporter)。 Services.CarsServices.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实现的更多信息。

c# .net .net-core rabbitmq microservices
1个回答
0
投票

当您在RabbitMQ的队列中上载消息时,该消息将仅被使用一次。

为了获得同一条消息要由多个使用者使用,您必须使用fan-out exchange

© www.soinside.com 2019 - 2024. All rights reserved.