usbmonkey
@usbmonkey

Как правильно организовать роутинг в rabbitmq?

Привет!
Мне нужно с помощью rabbit организовать следующую схему.
У меня есть N серверов ( в моем случаем сервер = customer ) логически разделенных по группам ( A / B / C / D / etc ).
Каждое сообщение должно быть доставлено всем серверам соответствующей группы.
A-message -> все A-customers, B -> B и так далее.

Я создал exchange с типом fanout именем exchange_A и queue_A, ожидая, что сообщения будут приходить каждому customer’у A-1, A-2 и A-3.
3b728c4c05e344119f465a2720e60335.png
Результат оказался, не такой как я ожидал - сообщения приходили к каждому серверу группы по очереди.

Потому что fanout - это не про customer, а про queue. И судя по описанию протокола, именно так и должно быть.
Customer забрал сообщение, rabbit - удалил его из очереди, больше это сообщение никто не увидит.

Прям сейчас моя схема выглядит так: под каждого customer создается отдельная очередь, в которую приходят сообщения от широковещательной точки обмена. Но мне все еще нужно отправить сообщения не во все очереди, а по группам. В итоге родилась такая схема.
38083587514d49b38f2d332586bf5177.png

Вопрос вот в чем.
Нормальная ли практика создавать очередь под каждого кастомера? Или есть более правильное решения чем на последней картинке?
Спасибо!
  • Вопрос задан
  • 372 просмотра
Решения вопроса 1
@napa3um
Нормально. Отдельные очереди на каждого потребителя нужны для гарантии доставки, иначе брокеру было бы неясно, когда можно удалить сообщение из общей очереди (забрали ли его все потребители). Т.е., мультиплицирование одного запроса на множество потребителей нужно осуществлять в логике приложения, а не в логике брокера (приложение должно знать о конфигурации ролей всех потребителей, а брокеру знать этого не нужно).

stackoverflow.com/questions/10620976/rabbitmq-amqp...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы