Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.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# 通知所有消费者一条消息_C#_Rabbitmq_Rebus_Rebus Rabbitmq - Fatal编程技术网

C# 通知所有消费者一条消息

C# 通知所有消费者一条消息,c#,rabbitmq,rebus,rebus-rabbitmq,C#,Rabbitmq,Rebus,Rebus Rabbitmq,我们正在使用Rebus 4.2.1和RabbitMQ 我们想要实现的是让三个(或更多)实例上的处理程序都对相同的消息做出反应 据我所知(这可能是错误的)-.Publish在IBus接口上应该做到这一点(我们一直在MSMQ上运行) RabbitMQ的工作方式是否有我遗漏的地方 (编辑:我认为RabbitMQ中使用的术语是“扇出”样式的消息) EDIT2:mookid8000让我走上了正确的轨道-问题是每个副本都要求相同的队列。我一做到这一点,一切就开始按预期(和预期)工作。使用REBS+Rabbi

我们正在使用Rebus 4.2.1和RabbitMQ

我们想要实现的是让三个(或更多)实例上的处理程序都对相同的消息做出反应

据我所知(这可能是错误的)-.Publish在IBus接口上应该做到这一点(我们一直在MSMQ上运行)

RabbitMQ的工作方式是否有我遗漏的地方

(编辑:我认为RabbitMQ中使用的术语是“扇出”样式的消息)


EDIT2:mookid8000让我走上了正确的轨道-问题是每个副本都要求相同的队列。我一做到这一点,一切就开始按预期(和预期)工作。

使用REBS+RabbitMQ,这非常简单,因为RabbitMQ对基于主题的发布/订阅消息传递具有本机支持

在每个用户中,您只需调用

await bus.Subscribe<YourEvent>();
然后,每个订阅服务器将在其输入队列中获得事件的副本


在封面下,Rebus使用RabbitMQ的“主题交换”交换类型来实现这一点。

感谢您的回答-然而,这正是我们正在做的,也是我们在三个相同的消费者身上看到的(除了在不同的机器上)只是为了解释设置-我们有三个WebFront,每个WebFront调用这个:var bus=Configure.With(new CastleWindsorContainerAdapter(container)).Logging(l=>l.Log4Net()).Routing(t=>t.TypeBased().AddEndpointMappingsFromAppConfig()).Transport(t=>t.UseRabbitMq(端点,“Xena.Web”)).Start();在Startupbook上,如果只有一个实例获得事件,那一定是因为它们正在从同一队列接收消息。。。。。?它们是完全相同的吗?它们是完全相同的(一个负载平衡器后面只有三个实例)。在这种情况下,您不能将同一条消息分发给所有它们–它们最终总是会争夺您放入队列的每条消息,这很好,因为这样您就可以在它们之间均匀地分配工作(这就是模式)您应该将消息发布到扇出交换。这在RabbitMQ教程中有详细说明:@LukeBakken问题是我没有直接使用RabbitMQ。但您是正确的:-)
await bus.Publish(new YourEvent(...));