Введение
Очередь сообщений (Message Queue) – компонент промежуточного ПО, обеспечивающий асинхронную передачу сообщений между приложениями или сервисами через промежуточное хранилище. Производитель (producer) помещает сообщение в очередь, не ожидая немедленной обработки. Потребитель (consumer) забирает и обрабатывает его в своём темпе.
Очереди сообщений – фундаментальный паттерн слабой связанности (loose coupling) в распределённых системах. Они выравнивают пиковую нагрузку и изолируют сервисы от сбоев друг друга.
История и контекст
Концепция очередей сообщений восходит к мейнфреймовым системам IBM MQ (MQSeries, 1993). Стандарт AMQP (Advanced Message Queuing Protocol) разработан в 2003 году JPMorgan Chase и открыт в 2006-м. RabbitMQ, реализующий AMQP, появился в 2007 году. Apache Kafka, созданный в LinkedIn в 2011-м, переосмыслил очереди как distributed commit log с возможностью replay.
В России активно применяются RabbitMQ, Apache Kafka, а также отечественные решения – Tarantool Queue и Artemis.
Как это работает
Ключевые паттерны взаимодействия через очереди:
- Point-to-Point (P2P) – сообщение потребляет один consumer; используется для задач-воркеров (image processing, email sending);
- Publish/Subscribe (Pub/Sub) – сообщение получают все подписчики на топик/обменник; broadcast уведомлений;
- Request/Reply – producer ожидает ответа через отдельную очередь; используется в RPC-like сценариях.
Гарантии доставки: At-most-once (без повторов, возможна потеря), At-least-once (возможны дубликаты), Exactly-once (сложнее всего обеспечить, поддерживается Kafka Transactions).
RabbitMQ vs Apache Kafka
RabbitMQ – «умный» брокер с маршрутизацией через exchanges, поддержкой приоритетов и TTL. Kafka – distributed append-only log с хранением истории и replay. Kafka предпочтительна для high-throughput event streaming, RabbitMQ – для task queues и сложной маршрутизации.
Где применяется
- Микросервисы – асинхронная интеграция сервисов без прямых HTTP-вызовов;
- Обработка задач – email-рассылки, генерация отчётов, ресайз изображений в фоне;
- Event-driven системы – распространение Domain Events между сервисами;
- IoT – сбор телеметрии с тысяч устройств через MQTT-брокеры;
- Финтех – транзакционные очереди с гарантиями exactly-once.
Преимущества и ограничения
Преимущества: слабая связанность сервисов; выравнивание нагрузки (load leveling); отказоустойчивость (сообщения сохраняются при сбое consumer); возможность горизонтального масштабирования потребителей.
Ограничения: eventual consistency вместо немедленной согласованности; сложность отладки асинхронных цепочек; необходимость обрабатывать дубликаты (идемпотентность); инфраструктурные затраты на поддержку брокера.
Связь с другими понятиями
Event-driven Architecture строится поверх очередей сообщений и брокеров. Микросервисы используют очереди как транспорт для асинхронной интеграции. CQRS применяет очереди для синхронизации read и write моделей. WebSocket решает схожую задачу в real-time для браузерных клиентов. IIoT использует MQTT-брокеры как специализированные очереди для промышленной телеметрии.