Очереди, потоки, события
RabbitMQ exchanges: тест с выбором ответа
Шесть вопросов поперёк всего юнита. Каждый отражает решение по топологии, которое ты принимаешь на реальном ревью дизайна — не определение для заучивания, а компромисс маршрутизации, который надо взвесить под 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 зацикливается навсегда. Сначала верно выбери тип exchange и binding; всё ниже зависит от корректной маршрутизации.