Что такое exchange и routing key в RabbitMQ?
- Какие бывают типы 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?
Разбор темы
- RabbitMQ, SQS и классические очереди
Модель exchange/binding/queue, ack/nack и publisher confirms, prefetch, DLQ через DLX, отложенные сообщения, SQS Standard vs FIFO и visibility timeout.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.