Работали ли вы с RabbitMQ?

«Работали ли вы с RabbitMQ?» — вопрос из категории Потоковая обработка и Kafka, который задают на 33% собеседований Data Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, я использовал RabbitMQ в микросервисных архитектурах в качестве брокера сообщений для асинхронной коммуникации и распределения задач.

Основные сценарии применения и опыт:

  • Очереди задач (Task Queues): Настраивал рабочие очереди (work queues) для распределения длительных задач (например, генерации отчетов, отправки email) между несколькими воркерами. Использовал Round-robin и Fair dispatch для балансировки нагрузки.
  • Обменники (Exchanges): Применял разные типы обменников: direct для маршрутизации по ключу, fanout для широковещательной рассылки (например, уведомление всех сервисов об обновлении конфигурации) и topic для сложной маршрутизации по шаблонам.
  • Надежность: Гарантировал доставку сообщений через подтверждения (acknowledgments), сохранял сообщения на диск (durable), использовал Publisher Confirms.
  • Мониторинг и управление: Работал с HTTP API и веб-интерфейсом для мониторинга очередей, обработки заторов (dead letter exchanges).

Пример публикации сообщения с использованием библиотеки pika для Python:

import pika

connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()

# Объявляем durable очередь
channel.queue_declare(queue='task_queue', durable=True)

# Публикуем persistent сообщение
channel.basic_publish(
    exchange='',
    routing_key='task_queue',
    body='Hello World!',
    properties=pika.BasicProperties(
        delivery_mode=pika.DeliveryMode.Persistent  # Делаем сообщение persistent
    )
)
connection.close()

RabbitMQ отлично подходил для сценариев, где важна гарантированная доставка и гибкая маршрутизация, а не сверхвысокая пропускная способность.