Получить доступ

Что такое exchange и routing key в RabbitMQ?

MiddleRabbitMQ и SQSRabbitMQ
Ещё спрашивают так:
  • Какие бывают типы exchange в RabbitMQ?
Коротко

Издатель публикует в exchange с routing key; exchange по bindings решает, в какие очереди положить копии. Потребители читают очереди.

  • direct — ключ совпадает точно
  • topic — шаблоны: order.*.paid, order.#
  • fanout — во все привязанные очереди; headers — по заголовкам

А ещё Сообщение без подходящей привязки теряется — mandatory-флаг или alternate exchange

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Компоненты:

  • exchange — точка публикации; сам не хранит сообщения;
  • queue — хранит сообщения до подтверждения потребителем;
  • binding — правило «очередь Q получает сообщения из exchange E с ключом K или шаблоном».

Типы exchange:

  • direct — в очереди, где ключ привязки равен routing key; например, email, sms, push по каналу уведомлений;
  • topic — ключ из слов через точку, шаблоны: * — одно слово, # — ноль и больше. order.eu.paid попадёт в привязку order.*.paid и order.#;
  • fanout — во все привязанные очереди, ключ игнорируется (pub/sub);
  • headers — по значениям заголовков.

Есть default exchange без имени: публикация с routing key = имени очереди кладёт сообщение прямо в неё.

Что учесть: если ни одна привязка не подошла, сообщение отбрасывается молча — помогает флаг mandatory (вернуть издателю) или alternate exchange. Для надёжности — durable exchange и очереди, persistent сообщения, publisher confirms.

Что хотят услышать

  • Exchange, queue, binding и их роли.
  • Типы exchange с примерами.
  • Судьба сообщений без подходящей привязки.

Частые ошибки

  • Думать, что exchange хранит сообщения.
  • Публиковать в exchange без привязок и терять сообщения.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Exchange — это очередь, а routing key — её имя
  • ✗Exchange — это consumer group в RabbitMQ
  • ✓Exchange — компонент маршрутизации (типы direct/topic/fanout/headers), куда продюсер пишет сообщение; routing key — метка, по которой exchange выбирает очереди через bindings
  • ✗Это термины из Kafka, в RabbitMQ их нет

Что спросят дальше

  • Что такое binding?
  • Чем direct exchange отличается от topic exchange?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем