在masstrtransit上禁用循环消息消耗

本文关键字:消息 循环 masstrtransit | 更新日期: 2023-09-27 18:07:31

我创建了一个基本的演示pub/sub应用程序,它在本地主机上与MassTransit一起工作。

我想要实现的是发布一条消息,并且所有订阅者都应该收到该消息。

目前,在我的环境中,我启动一个发布者应用程序和两个订阅者应用程序。但是当我发布消息时,订阅者轮流接收消息。

我的pub/sub code:

发布:

var bus = Bus.Factory.CreateUsingRabbitMq(config =>
{
  config.Host(new Uri("rabbitmq://localhost/"), h => { });
  config.ExchangeType = ExchangeType.Fanout;
});
var busHandle = bus.Start();
bus.Publish<SomethingHappened>(message);

订阅用户使用此代码:

var bus = Bus.Factory.CreateUsingRabbitMq(config =>
{
  var host = config.Host(new Uri("rabbitmq://localhost/"), h => { });
  config.ReceiveEndpoint(host, "MassTransitExample_Queue", e => e.Consumer<SomethingHappenedConsumer>());
});
var busHandle = bus.Start();
Console.ReadKey();
busHandle.Stop();

在masstrtransit上禁用循环消息消耗

在阅读下面的文章时,我发现队列名称必须是唯一的

https://www.maldworth.com/2015/10/27/masstransit-send-vs-publish/

当构建总线并注册端点时,如下所示:,必须确保queueName . receiveendpoint(…参数唯一

那么我的订阅者代码现在是这样的:

var bus = Bus.Factory.CreateUsingRabbitMq(config =>
{
  var host = config.Host(new Uri("rabbitmq://localhost/"), h => { });
  config.ReceiveEndpoint(host, "MTExQueue_" + Guid.NewGuid().ToString(), e => e.Consumer<SomethingHappenedConsumer>());
});
var busHandle = bus.Start();
Console.ReadKey();
busHandle.Stop();