Задать вопрос
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

Вопрос вот в чем.
Нормальная ли практика создавать очередь под каждого кастомера? Или есть более правильное решения чем на последней картинке?
Спасибо!
  • Вопрос задан
  • 387 просмотров
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Merion Academy
    RabbitMQ для разработчиков и DevOps
    4 месяца
    Далее
  • Яндекс Практикум
    RabbitMQ: проектирование и эксплуатации распределённых систем
    4 месяца
    Далее
  • Учебный центр IBS
    JVA-059 RabbitMQ для разработчиков
    1 неделя
    Далее
Решения вопроса 1
@napa3um
Нормально. Отдельные очереди на каждого потребителя нужны для гарантии доставки, иначе брокеру было бы неясно, когда можно удалить сообщение из общей очереди (забрали ли его все потребители). Т.е., мультиплицирование одного запроса на множество потребителей нужно осуществлять в логике приложения, а не в логике брокера (приложение должно знать о конфигурации ролей всех потребителей, а брокеру знать этого не нужно).

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

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

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