[英]One event multiple consumers (only one consumer working) Rabbitmq
MyProject.Core
MyProject.Services.DataImporter
Myproject.Services.Cars
Myproject.Services.Cars2
DataImporter
和Cars
项目都引用了 MyProject.Core 项目。 我有一个由DataImporter
服务发出的事件 ( DataImportFinishedEvent
)。 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 的队列中上传消息时,该消息将仅被使用一次。
为了让多个消费者使用相同的消息,您必须使用扇出交换。 在附加的链接中,您可以找到有关此概念如何工作的非常描述性的帖子。
后台发生的事情是,当您在交换中上传消息时,您的消息被放置在几个队列中。 然后每个服务都可以使用它自己的消息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.