Учебник RabbitMQ для начинающих
RabbitMQ на практике: как связать сервисы через очереди, не потерять сообщения и пережить сбой.
Курс «RabbitMQ: брокер сообщений» состоит из 5 разделов и 15 уроков: Знакомство с RabbitMQ, Модель маршрутизации, Надёжность, Паттерны и Эксплуатация. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Знакомство с RabbitMQ
- Зачем нужен брокер сообщений
Почему прямые HTTP-вызовы между сервисами хрупкие, как брокер сообщений даёт буфер, сглаживание пиков и слабую связанность, и какие задачи ему отдают.
- RabbitMQ или Kafka: что выбрать
Честное сравнение RabbitMQ и Kafka: брокер очередей против лога событий, маршрутизация против реплея, когда какой инструмент реально уместнее.
- Установка и первое сообщение
Поднимаем RabbitMQ в Docker, знакомимся с панелью управления на порту 15672 и отправляем первое сообщение через pika: producer, consumer, ack и разбор кода.
- Зачем нужен брокер сообщений
2 Модель маршрутизации
- Exchange, очередь и binding
Почему продюсер в RabbitMQ публикует в exchange, а не в очередь: binding, routing key, схема потока сообщения и рабочий пример на pika.
- Типы exchange: direct, fanout, topic
Direct, fanout и topic в RabbitMQ: точная маршрутизация, широковещание и шаблоны вида logs.*.error — с примерами на pika и таблицей сравнения.
- Routing key и шаблоны
Как проектировать routing key в RabbitMQ: символы * и # в topic-exchange, схемы именования событий и типичные ошибки маршрутизации.
- Exchange, очередь и binding
3 Надёжность
- Подтверждения: ack и nack
Почему auto_ack тихо теряет сообщения, как работает ручное подтверждение basic_ack, чем nack отличается от reject и что такое poison-loop в RabbitMQ.
- Долговечность: durable и persistent
Durable-очередь переживает рестарт брокера, persistent-сообщение переживает рестарт вместе с ней. Зачем нужны оба флага, при чём тут publisher confirms и чем платим.
- Prefetch и честное распределение
Почему round-robin в RabbitMQ приводит к тому, что один консьюмер захлёбывается, а второй простаивает, и как basic_qos с prefetch_count даёт честную раздачу задач.
- Подтверждения: ack и nack
4 Паттерны
- Work Queue: очередь задач
Очередь задач в RabbitMQ: распределение тяжёлой работы между воркерами, prefetch_count, ручные подтверждения и масштабирование добавлением консьюмеров.
- Publish/Subscribe: рассылка событий
Fanout-обменник в RabbitMQ: одно событие получают все подписчики. Свои очереди, queue_bind, пример «заказ создан» и типичные ошибки pub/sub.
- RPC через брокер
Запрос-ответ через RabbitMQ: свойства reply_to и correlation_id, direct reply-to, таймауты. Когда брокерный RPC оправдан и почему обычно лучше HTTP.
- Work Queue: очередь задач
5 Эксплуатация
- Dead Letter Queue и повторы
DLX и DLQ в RabbitMQ: куда девать необработанные сообщения, счётчик попыток, отложенный повтор через очередь-отстойник и защита от бесконечного requeue.
- TTL, приоритеты и лимиты очередей
TTL сообщений и очередей в RabbitMQ, приоритетные очереди x-max-priority, лимиты x-max-length и режимы переполнения drop-head и reject-publish.
- Мониторинг и кластеризация
Ключевые метрики RabbitMQ: глубина очереди, unacked, скорость публикации. Панель управления, алармы, flow control, кластер и quorum queues.
- Dead Letter Queue и повторы