Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 一个事件多个使用者(只有一个使用者工作)Rabbitmq_C#_.net_.net Core_Rabbitmq_Microservices - Fatal编程技术网

C# 一个事件多个使用者(只有一个使用者工作)Rabbitmq

C# 一个事件多个使用者(只有一个使用者工作)Rabbitmq,c#,.net,.net-core,rabbitmq,microservices,C#,.net,.net Core,Rabbitmq,Microservices,DataImporter和Cars项目都引用了MyProject.Core项目。我有一个事件(DataImportFinishedEvent)是由DataImporter服务发出的。Services.Cars和Services.Cars2都订阅了此活动 当触发事件时,我能够在服务.Cars中获取此事件,并且在处理事件后,我无法在服务.Cars2中获取它。如果我禁用了Services.Cars,那么我就能够成功获取Services.Cars2上的事件 简而言之,我不能为一个事件拥有多个订阅者,一旦

DataImporter
Cars
项目都引用了MyProject.Core项目。我有一个事件(
DataImportFinishedEvent
)是由
DataImporter
服务发出的。
Services.Cars
Services.Cars2
都订阅了此活动

当触发事件时,我能够在
服务.Cars
中获取此事件,并且在处理事件后,我无法在
服务.Cars2
中获取它。如果我禁用了
Services.Cars
,那么我就能够成功获取
Services.Cars2
上的事件

简而言之,我不能为一个事件拥有多个订阅者,一旦事件被处理,其他消费者就好像不再存在一样

不确定我应该共享什么代码,但这里是我的事件和事件处理程序的样子

MyProject.Core
MyProject.Services.DataImporter
Myproject.Services.Cars
Myproject.Services.Cars2
公共类DataImportFinishedEvent:事件
{
公共字符串数据{get;set;}
}
公共类DataImportFinishedEventHandler:IEventHandler{
公共任务句柄(DataImportFinishedEvent@event)
{
返回Task.FromResult(true);
}
}
如果您需要更多信息,我将在这两个服务(.net core)中注入RabbitMQBus实现

services.AddSingleton(sp=>
{
var scopeFactory=sp.GetRequiredService();
返回新的RabbitMQBus(sp.GetService(),scopeFactory);
});

如果您需要从
RabbitMQBus
实现获得更多信息,请告诉我。

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

为了获得相同的消息供多个消费者使用,您必须使用。在所附的链接中,你可以找到一篇描述这个概念如何运作的文章


在后台发生的情况是,当您在exchange中上载邮件时,您的邮件被放置在多个队列中。然后每个服务都可以使用它自己的消息。

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

为了获得相同的消息供多个消费者使用,您必须使用。在所附的链接中,你可以找到一篇描述这个概念如何运作的文章

在后台发生的情况是,当您在exchange中上载邮件时,您的邮件被放置在多个队列中。然后每个服务都可以使用自己的消息

public class DataImportFinishedEvent: Event
{
   public string Data { get; set; }
}

public class DataImportFinishedEventHandler : IEventHandler<DataImportFinishedEvent> {
   public Task Handle(DataImportFinishedEvent @event)
   {
        return Task.FromResult(true);
   }
}
 services.AddSingleton<IEventBus, RabbitMQBus>(sp =>
 {
      var scopeFactory = sp.GetRequiredService<IServiceScopeFactory>();
      return new RabbitMQBus(sp.GetService<IMediator>(), scopeFactory);
 });