← Назад к вопросам

Что такое RabbitMQ?

1.7 Middle🔥 161 комментариев
#Брокеры сообщений

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

RabbitMQ

RabbitMQ — это мощный open-source message broker (брокер сообщений), написанный на Erlang, который реализует протокол AMQP (Advanced Message Queuing Protocol). Это инструмент для асинхронного взаимодействия между приложениями и сервисами через очереди сообщений.

Основные компоненты

Producer (Продюсер) — приложение, которое отправляет сообщения Consumer (Потребитель) — приложение, которое получает и обрабатывает сообщения Exchange (Обменник) — точка входа для сообщений, выполняет маршрутизацию Queue (Очередь) — буфер, где хранятся сообщения до обработки Binding (Привязка) — правило, связывающее Exchange с Queue

Типы Exchange

  1. Direct — маршрутизирует сообщения по точному совпадению ключа
  2. Topic — маршрутизирует по шаблону ключей с wildcards (* и #)
  3. Fanout — отправляет копию сообщения всем привязанным очередям
  4. 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 незаменим при построении распределённых систем, где требуется надёжная доставка сообщений и асинхронное взаимодействие компонентов.