Брокер и очередь сообщений: что это и в чем отличия? 

4 марта 2025

Автор: Екатерина Ананьева

Архитектура

Интеграции

Введение

Брокер и очередь сообщений  — ключевые компоненты современной архитектуры приложений. Они обеспечивают асинхронный обмен данными между системами, гарантируя надёжность, маршрутизацию и доставку сообщений.

Системные аналитики, работающие с микросервисной архитектурой и асинхронными интеграциями, часто сталкиваются с этими терминами.

В этой статье разберем, что означает каждый из этих терминов, как работают технологии, в чем их ключевые отличия и какую роль они играют в передаче данных между сервисами.

Оглавление:

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

1. Очередь сообщений - что это и как работает?

Очередь сообщений — это структура данных, которая хранит сообщения или пакеты данных до тех пор, пока их не заберёт получатель для последующей обработки.

Другими словами  — это как обычная база данных, но для временного хранения информации, а не для постоянного. Временное хранение помогает не засорять "базу данных" и делать работу этого компонента для передачи данных между частями системы быстрее.

Компоненты очереди

✔️ Producer (продьюсер) — приложение или сервис, который создает сообщение и ставит его в очередь сообщений. Таким образом он может поставить задачу в очередь к отложенной обработке.

✔️ Message Queue (мэсседж кью) — очередь сообщений к обработке (т.е. сама очередь). Аналог базы данных для временного хранения сообщений. Всегда отдельный компонент на схеме архитектуры.

✔️ Consumer (консьюмер) — приложение или сервис, которое отвечает за чтение сообщений из очереди для их последующей обработки.

Очередь сообщений выделяют как отдельный компонент на схеме архитектуры, на таком же уровне, как и связанные с ней сервисы Producer и Consumer.

2. Зачем нужны очереди?

Очереди сообщений нужны, чтобы обеспечить асинхронное взаимодействие приложений, систем или сервисов.

Асинхронный обмен данными через очереди сообщений даёт следующие преимущества:

1. Гарантию доставки и обработки сообщений

Отправитель кладет сообщение в очередь и оно остается там до тех пор, пока не будет доставлено и обработано получателем.

2. Отказоустойчивость за счет асинхронного обмена

Даже если один сервис-получатель сообщения недоступен, то сообщение останется в очереди и как только он снова станет доступен, то обработает его.

3. Масштабируемость

Несколько обработчиков могут забирать уведомления из очереди, чтобы быстрее справляться с большим количеством сообщений.

Итого, очереди нужны:

  • Когда система состоит из нескольких независимых компонентов (сервисов или микросервисов), которые взаимодействуют друг с другом.
  • Когда требуется асинхронная обработка данных.
  • Когда система должна обрабатывать большой объём данных и выдерживать пики нагрузки.
  • Когда важна надёжность и гарантии доставки сообщений.


3. Как работают очереди

Варианты логики работы 

Очередь сообщений может работать по разным алгоритмам.

Основные:

  • FIFO (первый пришёл — первый ушёл) является наиболее распространённым.
  • LIFO (последний пришел — первый ушёл).

Кроме них существуют правила обработки сообщений по приоритету, принцип задержки обработки и другие.


Логика работы - Пример

Часть 1. Генерация событий и отправка в очередь

1. Пользователь оплачивает заказ в Интернет-магазине.

2. Сервис Заказов (далее — Producer) генерирует уведомление “Заказ №123 оплачен”, которое должно быть доставлено пользователю на email и SMS.

3. Producer формирует 2 сообщения в формате:

4. Producer кладет сообщение для отправки SMS в Очередь Сообщений (MQ).

5. Producer кладет сообщение для отправки email в Очередь Сообщений (MQ).


Часть 2. Публикация событий в очередь

Очередь получает и сохраняет каждое сообщение по отдельности.

Очередь выступает как временное хранилище (аналог базы данных), пока уведомление не будет обработано и отправлено.


Часть 3. Обработка событий из очереди

6Сервис отправки уведомлений (Consumer) подключается к очереди и забирает сообщение, которое первое оказалось в очереди - отправка SMS.

7. Consumer обрабатывает сообщение с запросом на отправку уведомления “Заказ №123 оплачен” через канал SMS. Уведомление отправляется через канал интеграции с SMS-сервисом. Данные об успешной отправке записываются в БД сервиса уведомлений.

8. Consumer подтверждает успешность обработки сообщения и оно удаляется из очереди.

Если Consumer не отправил подтверждение из-за ошибки или сбоя, сообщение возвращается в очередь и может быть обработано позже.

9. Consumer подключается к очереди и забирает следующее сообщение, которое первое оказалось в очереди - отправка email.

10. Consumer обрабатывает сообщение с запросом на отправку уведомления “Заказ №123 оплачен” через канал email. Уведомление отправляется через канал интеграции с почтовым сервисом. Данные об успешной отправке записываются в БД.

11. Consumer подтверждает успешность обработки сообщения и оно удаляется из очереди.


4. Брокер сообщений

Брокер сообщений — это программное обеспечение, которое управляет обменом сообщениями между приложениями, сервисами или системами.

Для обеспечения надёжного хранения сообщений и гарантированной доставки, брокеры часто используют компонент — очередь сообщений.

Очередь внутри брокера хранит и упорядочивает сообщения до тех пор, пока потребляющие приложения не смогут их обработать. В ней сообщения обычно хранятся в том порядке, в котором они были переданы от отправителя (Producer), и остаются там до подтверждения их получения получателем (Consumer).

Очередь — это именно место хранения сообщений, как временная база данных внутри брокера.

Очередей внутри одного брокера может быть несколько.

Брокеры сообщений могут валидировать, хранить, маршрутизировать и доставлять сообщения в нужные сервисы.

Они выполняют роль посредников между различными сервисами, позволяя отправителям отправлять сообщения, не зная:

  • где находятся получатели,
  • активны ли они в данный момент,
  • сколько их.

Брокеры сообщений предлагают два основных паттерна (шаблона) обмена данными:

1. Точка-точка (Point-to-Point Messaging)
Это паттерн, используемый в очередях сообщений, где существует один отправитель и один получатель. Каждое сообщение в очереди отправляется только одному получателю и может быть обработано только один раз.

2. Публикация-подписка (Publish/Subscribe Messaging)
В этом паттерне отправитель (producer) публикует сообщения в определённую тему (topic), а подписчики (consumers) подписываются на темы, чтобы получать сообщения. Такой механизм используется в Kafka.
Все сообщения, опубликованные в теме, доставляются всем приложениям, подписанным на неё.
Применяется в случаях, где несколько систем должны получить одну и ту же информацию.

Возможности и логика работы брокеров отличаются в зависимости от конкретного решения.

Основные решения по брокерам на рынке

  • Apache Kafka
  • RabbitMQ
  • ActiveMQ
  • Amazon MQ, Amazon SQS
  • Яндекс Message Queue (YMQ) - аналог Amazon
  • и другие.


5. Очередь VS Брокер - в чём разница?

Очередь сообщений — это структура данных, которая хранит сообщения до тех пор, пока их не заберёт получатель.

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

Понятие “очередь сообщений” часто звучит вместе с понятием “брокер сообщений”, но она может использоваться независимо от брокера. В таком случае её функциональность будет ограничена, так как это будет просто хранилище данных.

Очередь сообщений может использоваться независимо от брокера, но такая реализация подходит только для простых задач или небольших систем. Если система становится более сложной и требует масштабируемости, надёжности и гибкости, использование специализированного брокера сообщений (например, Kafka, RabbitMQ) становится необходимым.


6. Вопросы с "подвохом" про очереди и брокеры

Этот пункт полезен для подготовки к собеседованиям на Системного Аналитика, так как знание и понимание этой темы востребовано в проектах с микросервисной архитектурой и часто проверяется на интервью.

Если у нас есть очередь сообщений, зачем нужен брокер?

Очередь сообщений — это только структура данных для хранения сообщений, а брокер сообщений предоставляет дополнительные функции, такие как:

✔️Управление множеством очередей.
✔️Маршрутизация сообщений.
✔️Поддержка нескольких потребителей.

Брокер — это более комплексная система, в состав которой входят очереди.

Может ли очередь работать без брокера?

Да, тогда это будет просто временное хранилище сообщений.

Могу ли я использовать брокер без очередей сообщений?

Нет. Очереди — одна из базовых составляющих большинства брокеров. Однако брокеры предоставляют более широкую функциональность, например, топики для публикации/подписки, что выходит за рамки простых очередей.

Если я использую очередь сообщений, могу ли я гарантировать доставку сообщения?

Не всегда. Очередь сообщений сама по себе не гарантирует доставку, если нет спец. механизмов. Брокер сообщений, с другой стороны, предоставляет такие функции, как подтверждение доставки и повторная доставка сообщений в случае сбоя.

Очередь всегда работает по принципу FIFO (первое пришло - первое вышло из очереди)?

Нет, не всегда. Хотя FIFO — это распространённый механизм, очереди могут быть:

  • Приоритетными (Priority Queue): Сообщения с высоким приоритетом обрабатываются первыми.
  • LIFO (Last In, First Out): Последнее сообщение обрабатывается первым.
  • и другие решения.

Может ли очередь работать с несколькими производителями и потребителями?

Технически да, но это усложняет реализацию, если очередь реализована без брокера.

Дополнительные материалы

2. Практическая программа "Проектирование архитектуры" для Системных Аналитиков с модулем по работе с брокерами

3. Мини-книга "Очередь сообщений - что это и как работает"

Подписывайтесь на GetAnalyst, изучайте разборы проектов и шаблоны документации для системных аналитиков каждый день!

Контакты

+7 (499) 686-15-46

Лицензия №Л035-01255-50/01366872 от 28.08.2024

*Instagram — запрещенная на территории РФ организация

Практический опыт здесь, 2021-2025

Мы используем файлы cookie, для персонализации сервисов и повышения удобства пользования сайтом. Если вы не согласны на их использование, поменяйте настройки браузера.