@topuserman

Насколько правильно, создавать большое кол-во очередей в RabbitmMQ?

Часто натыкаюсь на кейсы, rabbitmq используют в приложениях, или на сайтах, как систему доставки разных оповещений пользователю,
при этом для каждого пользователя, создается очередь, и в качестве роутинг ключа используется ID пользователя.

Является ли это хорошей практикой? Не страшно ли создавать для каждого пользователя очередь? и нужно ли что-то учитывать ? Например юдалять ли автоматически очередь, если пользователь не в сети или неактивный ?

Что делать, если пользователей чуть больше миллиона ? млн очередей - как-то будет серьезно влиять на производительность, если не учитывать объем данных в этих очередях ?
  • Вопрос задан
  • 149 просмотров
Пригласить эксперта
Ответы на вопрос 2
inoise
@inoise
Solution Architect, AWS Certified, Serverless
- можно использовать топики
- можно использовать заголовки
- можно использовать json параметры в теле сообщения
Ответ написан
@yarkin
Тут всё зависит от задачи и терминологии. Например, "пользователь" может быть как какой-то объект системы, который не имеет прямого коннекта к RabbitMQ и отделен слоем другого ПО, так и быть непосредственно подключённым к нему. В первом случае на уровне RabbitMQ нужно будет иметь возможность различать типы промежуточного ПО (например, отправка сообщений по почте, по телеге и т.п.), возможно их группы (например, шардинг по регионам), а конкретный ID пользователя RabbitMQ знать совсем тут не нужно и он может быть частью тела сообщения. Во втором случае на уровне RabbitMQ уже нужно будет различать конкретных пользователей и ID уже должен быть частью метаданных, видных RabbitMQ.
Дальше, если перейти от термина "пользователь" к термину "клиент" (например), то в первом случае количество клиентов будет равно количеству инстансов промежуточного ПО (например, 1000), а во втором случае - количеству конечных пользователей (например, 1 млн). И тут можно сказать, что для каждого клиента (или группы равнозначных воркеров) нужно создавать очередь. В первом случае их будет тысяча, а во втором - миллион.

И да, очереди у RabbitMQ не самые лёгкие, по моему опыту (на версии 3.6-3.7) 10 тыс. очередей занимали около 800 МБ памяти.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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