繁体   English   中英

一个事件多个消费者(只有一个消费者工作)Rabbitmq

[英]One event multiple consumers (only one consumer working) Rabbitmq

MyProject.Core
MyProject.Services.DataImporter
Myproject.Services.Cars
Myproject.Services.Cars2

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

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

为了让多个消费者使用相同的消息,您必须使用扇出交换 在附加的链接中,您可以找到有关此概念如何工作的非常描述性的帖子。

后台发生的事情是,当您在交换中上传消息时,您的消息被放置在几个队列中。 然后每个服务都可以使用它自己的消息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM