RabbitMQ exchanges: тест с выбором ответа
Тест с выбором на синтез по всему юниту — маршрутизация direct/fanout/topic/headers, binding key, smart-broker push, prefetch и сбои dead-letter.
Шесть вопросов поперёк всего юнита. Каждый отражает решение по топологии, которое ты принимаешь на реальном ревью дизайна — не определение для заучивания, а компромисс маршрутизации, который надо взвесить под production-нагрузкой.
Убедись, что связываешь тип exchange, binding key, smart-broker push-модель и production-сбои — тот синтез, к которому вёл урок.
Надо доставлять события заказов трём сервисам сегодня, ожидаешь новых позже, и один сервис интересуют только EU-заказы. Какой тип exchange подходит и почему?
Queue нового consumer'а ничего не получает — ни ошибок, ни исключений, а вызовы publish продюсера возвращают успех. Самая вероятная причина?
Topic-binding использует ключ order.*.eu. Какой routing key совпадёт?
Коллега говорит, что RabbitMQ и Kafka — взаимозаменяемые очереди, поэтому поздно подключившийся consumer может воспроизвести события за неделю из любой. Где ошибка?
Один consumer держит огромный бэклог неподтверждённых сообщений, пока быстрые consumer'ы простаивают, а память брокера ползёт к high-watermark. Что неверно настроено и какой фикс?
Consumer делает nack-with-requeue на некорректном payload, который никогда не сможет обработать, и один worker теперь застрял, бесконечно переполучая то же сообщение. Какой устойчивый фикс?
Сквозная линия — одно дерево решений маршрутизации: тип exchange это алгоритм (direct — точное совпадение, fanout — рассылка, topic — точечный паттерн с * и #, headers — матч атрибутов), binding плюс routing key решают, какие queue получат независимую копию, а smart-broker push-модель означает, что подтверждённое сообщение удаляется — никакого replay, в отличие от Kafka. Production-сбои на слой ниже: непривязанный exchange тихо отбрасывает без флага mandatory, слишком высокий prefetch голодает быстрых consumer’ов и растит неподтверждённую память, а poison message без dead-letter exchange зацикливается навсегда. Теперь, когда будешь ревьюить RabbitMQ-дизайн, первые три вопроса — какой тип exchange, верны ли binding’и и есть ли dead-letter маршрут — всё ниже зависит от этих трёх.
Что-то непонятно?
Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.