Тут всё зависит от задачи и терминологии. Например, "пользователь" может быть как какой-то объект системы, который не имеет прямого коннекта к RabbitMQ и отделен слоем другого ПО, так и быть непосредственно подключённым к нему. В первом случае на уровне RabbitMQ нужно будет иметь возможность различать типы промежуточного ПО (например, отправка сообщений по почте, по телеге и т.п.), возможно их группы (например, шардинг по регионам), а конкретный ID пользователя RabbitMQ знать совсем тут не нужно и он может быть частью тела сообщения. Во втором случае на уровне RabbitMQ уже нужно будет различать конкретных пользователей и ID уже должен быть частью метаданных, видных RabbitMQ.
Дальше, если перейти от термина "пользователь" к термину "клиент" (например), то в первом случае количество клиентов будет равно количеству инстансов промежуточного ПО (например, 1000), а во втором случае - количеству конечных пользователей (например, 1 млн). И тут можно сказать, что для каждого клиента (или группы равнозначных воркеров) нужно создавать очередь. В первом случае их будет тысяча, а во втором - миллион.
И да, очереди у RabbitMQ не самые лёгкие, по моему опыту (на версии 3.6-3.7) 10 тыс. очередей занимали около 800 МБ памяти.