RabbitMQ: быстрая отправка сообщений

В ИТ постоянно требуется отправлять сообщения от одного сервиса к другому. Это должно происходить контролируемым образом, иначе сообщения блокируют друг друга, образуется очередь и процессы не могут быть выполнены оптимально. Чтобы приложения могли без проблем общаться друг с другом, имеет смысл использовать некоего посредника — службу, которая берет на себя распределение сообщений. Мы называем это брокером сообщений. Здесь мы представляем один из самых известных: RabbitMQ.

Что такое RabbitMQ?

RabbitMQ основан на идее усовершенствованного протокола очередей сообщений (AMQP). Основное преимущество AMQP заключается в том, что отправителю и получателю не нужно понимать один и тот же язык кодирования. С тех пор брокер сообщений несколько отошел от AMQP и, с помощью подключаемых модулей, совместим с такими протоколами сообщений, как STOMP и MQTT, но идея остается прежней: между производителем и потребителем сообщения существует очередь. Сообщения временно хранятся в этой очереди.

Факт

В данном контексте термин «сообщение» используется очень широко. Сообщения могут быть фактическими сообщениями, включая текст, или инструкциями для других программ. Любая форма передачи информации может происходить через RabbitMQ или другие брокеры сообщений.

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

Процесс с RabbitMQ

В передаче сообщений есть четыре станции:

  • Производитель: создает сообщения
  • Обмен: пересылает сообщения
  • Очередь: хранит сообщения
  • Потребитель: обрабатывает сообщение

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

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

Прямой обмен

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

Тематический обмен

Этот тип обмена расширяет концепцию прямого обмена. Вместо одного критерия (ключ маршрутизации = ключ привязки) можно обращаться к нескольким очередям. Для этого используются держатели мест. Таким образом, определенные очереди и ключи привязки могут быть приняты, в то время как другие остаются исключенными.

Веерный обмен

Веерный обмен — это широковещательная рассылка. Сообщение распространяется по всем доступным очередям без какой-либо сортировки, при этом ключ маршрутизации игнорируется.

Обмен заголовками

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

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

RabbitMQ в использовании

RabbitMQ — это сервер с открытым исходным кодом, написанный на языке кодирования Erlang, его можно загрузить с официального сайта для Linux, BSD, Unix, Windows и macOS. Для облегчения нагрузки на брокер сообщений и расширения его функций рекомендуется использовать плагины. Наиболее важным здесь является плагин управления, который входит в стандартную установку, но должен быть активирован. Он позволяет пользователям управлять RabbitMQ через графический интерфейс, вести обзор сообщений в очередях и просматривать статистику.

Полезным может оказаться и плагин Shovel, позволяющий соединить две брокерские сущности вместе. Это имеет смысл, например, для лучшего распределения нагрузки. Кроме того, в целях безопасности можно перенести конфиденциальные данные или большие объемы данных в совершенно другую сеть.

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

Резюме

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

Оцените статью
cdelat.ru
Добавить комментарий