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