Вопрос с собеседования · Брокеры сообщений

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

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

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

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

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

Подробно

Компоненты:

  • 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 — это очередь, а routing key — её имя
  • ✗Exchange — группа потребителей, а routing key — номер потребителя, которому уйдёт сообщение
  • ✗Это термины из Kafka, в RabbitMQ их нет

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

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

Разбор темы

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

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования