Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
RabbitMQ
RabbitMQ — это мощный open-source message broker (брокер сообщений), написанный на Erlang, который реализует протокол AMQP (Advanced Message Queuing Protocol). Это инструмент для асинхронного взаимодействия между приложениями и сервисами через очереди сообщений.
Основные компоненты
Producer (Продюсер) — приложение, которое отправляет сообщения Consumer (Потребитель) — приложение, которое получает и обрабатывает сообщения Exchange (Обменник) — точка входа для сообщений, выполняет маршрутизацию Queue (Очередь) — буфер, где хранятся сообщения до обработки Binding (Привязка) — правило, связывающее Exchange с Queue
Типы Exchange
- Direct — маршрутизирует сообщения по точному совпадению ключа
- Topic — маршрутизирует по шаблону ключей с wildcards (* и #)
- Fanout — отправляет копию сообщения всем привязанным очередям
- Headers — маршрутизирует по заголовкам сообщения
Пример использования с pika
import pika
# Подключение к RabbitMQ
connection = pika.BlockingConnection(pika.ConnectionParameters("localhost"))
channel = connection.channel()
# Объявление очереди
channel.queue_declare(queue="my_queue", durable=True)
# Отправка сообщения
channel.basic_publish(
exchange="",
routing_key="my_queue",
body="Hello RabbitMQ!",
properties=pika.BasicProperties(delivery_mode=2) # persistent
)
connection.close()
Consumer (Потребитель)
import pika
def callback(ch, method, properties, body):
print(f"Получено сообщение: {body.decode()}")
ch.basic_ack(delivery_tag=method.delivery_tag) # подтверждение
connection = pika.BlockingConnection(pika.ConnectionParameters("localhost"))
channel = connection.channel()
channel.queue_declare(queue="my_queue", durable=True)
channel.basic_qos(prefetch_count=1) # обработка по одному сообщению
channel.basic_consume(queue="my_queue", on_message_callback=callback)
print("Ожидание сообщений...")
channel.start_consuming()
Преимущества
- Надёжность: гарантирует доставку сообщений даже при сбоях
- Масштабируемость: легко добавлять новых потребителей
- Асинхронность: разделяет зависимости между сервисами
- Гибкость: поддерживает сложные паттерны маршрутизации
- Persisten: может сохранять сообщения на диск
Когда использовать
- Межсервисное взаимодействие в микросервисной архитектуре
- Обработка длительных задач в фоне (background jobs)
- Event-driven архитектура
- Балансировка нагрузки между обработчиками
- Decoupling сервисов для повышения отказоустойчивости
RabbitMQ незаменим при построении распределённых систем, где требуется надёжная доставка сообщений и асинхронное взаимодействие компонентов.