Ответ
Да, я использовал 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 отлично подходил для сценариев, где важна гарантированная доставка и гибкая маршрутизация, а не сверхвысокая пропускная способность.