RabbitMq Динамически добавлять / удалять очереди / потребителей - PullRequest
0 голосов
/ 26 октября 2018

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

Я ищу решение для параллельного выполнения заданий каждого пользователя.Я могу динамически создавать очереди для каждого пользователя, но это не очень хорошее решение, потому что будут сотни очередей и потребителей.Как я могу удалить незанятых потребителей / очередей автоматически.Могу ли я использовать сельдерей и редис для этой проблемы каким-либо образом?

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Вы должны добавить больше очередей для масштабирования и для согласованности вы можете использовать распределение хэширования.

Вы можете использовать плагины как https://github.com/rabbitmq/rabbitmq-consistent-hash-exchange или вы можете сделать это вручную, с большим количеством очередей, которые вы можете масштабировать, если одного узла недостаточно, вы можете создать кластер (https://www.rabbitmq.com/clustering.html) и распределитьнагрузка на большее количество узлов.

Один потребитель для очереди, если вам нужна последовательность.

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

0 голосов
/ 26 октября 2018

Не рекомендуется использовать много очередей в RabbitMQ.Очередь - это один поток на сервере RabbitMQ.

Ваша проблема в том, что «тысячи сообщений от одного пользователя блокируют других пользователей», я думаю, что решение заключается в использовании Приоритетной очереди .

У каждого пользователя есть счетчик для записи количества сообщений, отправленных за период времени. Если это значение велико, сообщения, опубликованные пользователем, будут иметь низкий приоритет.Таким образом, если в очереди ожидают много сообщений, сообщения от другого пользователя будут сначала отправлены вашим потребителям.В этой ситуации вы должны установить соответствующую «предварительную выборку» на канале потребителя.

...