@petun
Full Stack web Developer

Как организовать динамическое добавление consumer-ов для rabbit-mq?

Итак, задача. Есть сервер, внутри крутятся два инстанса одного процесса
(consumer), который делает тяжелую работу, получая команду по rabbitmq. Если внутри одного сервера запускать больше 2 инстансов, все перестает работать вообще.. тупо не тянет проц.. Есть идея, если оба процесса заняты, добавлять еще один виртуальный сервер и запускать на них так же еще два таких же cosumer процесса. И так далее, пока пулл виртуалок не кончится.

Кто нибудь что то подобное решал?
Вообще с помощью rabbitmq такое решить возможно?
  • Вопрос задан
  • 467 просмотров
Пригласить эксперта
Ответы на вопрос 2
@RidgeA
Я бы сделал промежуточного консьюмера, который бы просто очередь выгребал и смотрел что по свободным ресурсам. Если есть возможность (есть свободный процесс или есть возможность поднять новую виртуалку и тем самым обеспечить свободный процесс) - ставил в другую очередь, где сообщение получит уже консьюмер, который выполняет реальную задачу. Для каждого процесса можно организовать отдельную очередь по topic exchange на каждый процесс на виртуалке.

Если воркер-посредник видит, что свободных процессов нет и нет возможности поднять виртуалку - возввращать сообщение в очередь (можно через отложенную очередь).
Ответ написан
@yarkin
К очереди в RabbitMQ могут быть подключены одновременно несколько потребителей (consumers), но сам RabbitMQ никак не связан с их масштабированием. Понять, что текущие потребители не справляются со своей задачей, можно по анализу размера очереди (количеству сообщений в ней). Саму задачу масштабирования, скорей всего, надо решать на уровне какой-нибудь контейнерной виртуализации (например, docker), это будет проще и быстрей.
Ответ написан
Ваш ответ на вопрос

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

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