Привет!
Дошло время поговорить про типы обменников (Exchange) в RabbitMQ 🐰
Зачем вообще это нужно знать?
Дело в том, что когда мы подключаемся к обменнику из автотестов нам нужно знать характеристики обменника, и его настройки.
Но че хорошо - это то, что python будет рейзить ошибки до тех пор пока мы не настроим подключение к обменнику правильно.
Cначала надо рассказать про такое понятие как Routing Key.
В RabbitMQ - это строка, которая используется для маршрутизации сообщений от обменника (exchange) к очередям (queues) на основе правил, заданных типом обменника и настройками binding.
Простыми словами:
- Это как "адрес" или "тег" сообщения, который помогает обменнику решить, в какую очередь его отправить.
- Работает в связке с binding (привязкой очереди к обменнику), где указывается, какие routing key очередь принимает.
Теперь можно и про обменики.
1. Fanout
Публикует сообщения во все очереди, которые связаны с этим обменником через binding.
Игнорирует любые настройки binding (routing key или заголовки).
Все очереди получат одно и то же сообщение — никаких фильтров.
2. Direct
Публикует сообщения только в те очереди, у которых routing key в binding полностью совпадает с routing key сообщения.
То есть тут уже появляются строгие правила фильтрации.
3. Topic
Похож на Direct, но поддерживает wildcard’ы * и # в routing key.
Примеры:
• # — означает «все сообщения», фактически как в Fanout.
• *.created — сообщения, где routing key заканчивается на .created.
Это что-то типа простых регулярных выражений для фильтрации сообщений.
4. Headers
Тут вообще не используется routing key.
Роутинг идёт по заголовкам сообщений и правилам в binding.
В binding настраиваются:
• ожидаемые заголовки
• параметр x-match:
• x-match=any — хотя бы один заголовок должен совпасть
• x-match=all — должны совпасть все заголовки
В общем, это важно:
- чтобы настроить себе тестовую очередь и не своровать сообщения у прода
- или если просто хотите «послушать» сообщения из какого-нибудь топика
——————————-
📱 TG-сообщество
📱 Обучение
📱 Отзывы
Post #379
931

- ❤ 1