Отключить циклический перебор сообщений на MassTransit

Я создал базовое демонстрационное приложение pub / sub, которое работает на локальном хосте с MassTransit.

Я хочу опубликовать сообщение, и его должны получить все подписчики.

На данный момент в своей среде я запускаю одно приложение для издателя и два приложения для подписчиков. Но когда я публикую сообщение, подписчики получают его по очереди.

Мой паб-код / ​​дополнительный код:

Опубликовать:

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();

person Ozkan    schedule 19.09.2016    source источник


Ответы (1)


При чтении статьи ниже я обнаружил, что имя очереди должно быть уникальным.

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

При построении шины и регистрации конечной точки типа sbc.ReceiveEndpoint (...) необходимо быть уверенным, что параметр queueName уникален.

Итак, мой код подписчика теперь выглядит так:

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();
person Ozkan    schedule 20.09.2016