#c# #rabbitmq #masstransit
#c# #rabbitmq #массовый переход
Вопрос:
Я пытаюсь запустить систему обмена сообщениями между несколькими приложениями. У меня запущен экземпляр RabbitMQ, и, похоже, все в порядке. Я могу подключить нескольких подписчиков / издателей к экземпляру RabbitMQ, и, похоже, с ними все в порядке. Затем я могу опубликовать сообщение от одного издателя, но сообщение получает только один подписчик.
Я считаю, что это связано с тем, как я устанавливаю очереди. Я просмотрел руководство по Rabbit, https://www.rabbitmq.com/tutorials/tutorial-three-dotnet.html , но я не знаю, надеюсь, что это переведется в библиотеку Masstransit.
Хоть убейте, у меня никак не получается понять, что я делаю не так.
NuGets:
- Массовый переход.Расширения.DependencyInjection 5.3.2
- Массовый переход.RabbitMQ 5.3.2
Кто-нибудь может помочь?
// Register MassTransit
services.AddMassTransit(mtCfg =>
{
mtCfg.AddConsumer<DomainMessageConsumer>();
mtCfg.AddBus(provider => Bus.Factory.CreateUsingRabbitMq(rbCfg =>
{
var host = rbCfg.Host(settings.RabbitMq.Host, settings.RabbitMq.VirtualHost, h =>
{
h.Username(settings.RabbitMq.Username);
h.Password(settings.RabbitMq.Password);
});
rbCfg.ReceiveEndpoint(host, settings.RabbitMq.ConnectionName, ep =>
{
ep.PrefetchCount = 16;
ep.UseMessageRetry(x => x.Interval(2, 100));
ep.ConfigureConsumer<DomainMessageConsumer>(provider);
});
}));
});
Комментарии:
1. Я предлагаю вам начать с чтения документов о MassTransit, а не RMQ : masstransit-project.com/MassTransit/usage /… и masstransit-project.com/MassTransit/troubleshooting /…
Ответ №1:
Проблема, с которой вы сталкиваетесь, заключается в том, что вы используете одно и то же имя очереди для всех потребителей. Если вы хотите широковещательную передачу для всех потребителей, вы должны сделать все имена очередей уникальными. В вашем примере кода это settings.RabbitMq.ConnectionName
переменная, которую вы должны сделать уникальной для каждого потребителя.
Посмотрите на картинку ниже и представьте, Subscription B
какую очередь settings.RabbitMq.ConnectionName
вы установили. То, что вы получите, — это только Subscriber B1
получаемая левая часть изображения (на самом деле это циклическая балансировка, но это будет оффтопик). Если вы хотите широковещательную передачу, вы можете создать отдельные подписки (или settings.RabbitMq.ConnectionName
в вашем примере).