Предположим, у вас есть несколько продюсеров и один потребитель, который хочет получать постоянные сообщения от всех доступных издателей.Как сбалансировать запросы издателей с помощью RabbitMQ?
Производители работают с разной скоростью. Предположим, что система A производит 10 запросов/сек и запрос системы B 1/сек. Поэтому, если вы используете единственную очередь, вы будете обрабатывать 10 сообщений от A, а затем 1 сообщение от B.
Но что, если вы хотите сбалансировать нагрузку и обработать одно сообщение от A, а затем одно сообщение от B и т. Д.? Потребление из нескольких очередей не является хорошим вариантом, потому что мы не можем использовать подстановочные знаки в этом случае.
Update:
Очередь на производителя кажется, лучший подход. Производители не знают своей скорости, которая постоянно меняется. Имея одну очередь для каждого потребителя, я могу подписаться на одну тему и получать сообщения от всех доступных издателей. Но, имея очередь на одного продюсера, мне нужно самому закодировать логику:
- Получить все доступные очереди через плагин управления (AMQP не позволяет перечислять очереди).
- Фильтровать по очереди.
- Внедрять раунд стратегии.
- Внедрите механизм уведомления, чтобы подписаться на новые издатели, которые могут появиться в любой момент.
- Удалите ненужную очередь, когда издатель исчез, и клиент прочитал все сообщения.
Ну, это кажется довольно простым, но я думал, что брокер может предоставить всю эту функциональность без какой-либо кодировки. В случае с одной очередью я просто создаю одну постоянную очередь, привязываю ее к обмену темами, а затем запускаю любое количество издателей, отправляющих сообщения в эту тему. Этот вариант работает почти из коробки.
Непонятно, что вы подразумеваете под «не может использовать привязку подстановочных знаков». Пожалуйста, уточните свой вопрос с более подробной информацией о том, почему несколько очередей невозможно. –