advanced

RabbitMQ exchanges

Выбирайте direct, topic, fanout или headers exchanges по routing intent и держите producers independent от queue topology.

Exchange принимает опубликованные сообщения и направляет их в очереди через bindings. Direct сопоставляет routing key точно; topic использует шаблоны с wildcards; fanout рассылает во все привязанные очереди; headers сопоставляет атрибуты сообщения. Producer публикует в exchange по имени и routing key, не зная, какие очереди существуют.

Выбор типа exchange — решение по топологии: рабочие очереди часто используют direct или topic; широковещательные события — fanout; выборочные подписки — topic со стабильными соглашениями по ключам. Разделение producer и layout очередей позволяет добавлять consumer без передеплоя publisher.

На интервью: назовите четыре типа exchange, приведите по одному use case и объясните, почему producer не должен жёстко знать имена очередей.

Типовые ошибки: fanout, когда сообщения нужны только части подписчиков; слишком широкие topic-паттерны с неожиданной доставкой; смешение типов exchange без документированных контрактов маршрутизации.

Компромисс — гибкость против сложности: знайте, когда достаточно более простого пути.

Чеклист:

  • Сопоставьте тип exchange с целью доставки.
  • Держите routing keys стабильными и задокументированными.
  • Отделите producer от топологии очередей.
  • Продумайте безопасное добавление новых consumer.