Уведомление всех потребителей о сообщении - PullRequest
0 голосов
/ 24 сентября 2018

Мы используем Rebus 4.2.1 и RabbitMQ

. Мы хотим, чтобы обработчики в трех (или более) экземплярах реагировали на одно и то же сообщение.

Я понял (что может быть неправильно) - публикация на интерфейсе IBus должна делать именно это (и мы работали с этим на MSMQ).

Есть ли что-то, чего мне не хватает с тем, как работает RabbitMQ?

(РЕДАКТИРОВАТЬ: я думаю, что термин, используемый в RabbitMQ, является сообщением в стиле "разветвления")

EDIT2: mookid8000 поставил меня на правильный путь - проблема заключалась в том, что каждая реплика запрашивала одну и ту же очередь,Как только я сделал это уникальным - все стало работать как задумано (и ожидалось).

1 Ответ

0 голосов
/ 24 сентября 2018

С Rebus + RabbitMQ это довольно просто, потому что RabbitMQ имеет встроенную поддержку тематического паба / суб-сообщений.

В каждом подписчике вы просто вызываете

await bus.Subscribe<YourEvent>();

, чтозаставить Rebus сгенерировать строку темы из вашего типа события, а затем связать ее с входной очередью подписчика, а затем в издателе вы

await bus.Publish(new YourEvent(...));

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

Для этого Rebus использует тип обмена RabbitMQ "Topic Exchange" для этой работы.

...