- Что такое RabbitMQ
- Как работает RabbitMQ
- Где и зачем нужен RabbitMQ
- Разница между Apache Kafka и RabbitMQ
- Заключение
В этой статье мы обсудим инструмент, который обеспечивает коммуникацию между элементами в системах. RabbitMQ: что это, как работает и где пригодится.
Что такое RabbitMQ
RabbitMQ — это легковесный брокер сообщений с открытым исходным кодом, который применяется для обмена сообщениями между различными элементами системы.
Брокер — это посредник, который доставляет данные от продюсера получателю, управляет очередью, осуществляет маршрутизацию и хранение данных.
Такие посредники используются в различных архитектурах программного обеспечения, особенно в микросервисных, так как в них важна независимая работа компонентов.
Как работает RabbitMQ
Для понимания схемы работы нужно разобраться с основными компонентами брокера:
- Queue — очередь. Структура данных, в которой сообщения находятся до того момента, пока получатель не будет готов их принять. Отсюда же будет осуществляться отправка копии данных получателю.
- Exchange — обменник. Компонент, который осуществляет маршрутизацию, то есть распределение данных по очередям на основе binding.
- Binding — привязка, связи. Набор правил, который указывает обменнику, в какую очередь должны попадать сообщения. Допускается, что привязок может быть несколько и с разными правилами.
- Message — сообщение. Единица данных, которую нужно передать от продюсера получателю. Это может быть текст, JSON-, XML-файлы, бинарные данные и другие форматы.
- Producer — продюсер. Сервис, который отправляет данные брокеру.
- Consumer — получатель. Сервис, который получает и обрабатывает данные.
Описание работы инструмента:
- Продюсер генерирует данные и отправляет их в обменник.
- Обменник определяет данные в нужную очередь по правилам маршрутизации, установленным в binding.
- Данные из очереди копируются и направляются получателю, когда он готов принять сообщение.
- После получения и обработки данных получатель направляет брокеру ACK — acknowledgement, или подтверждение;
- Данные удаляются из очереди после получения ACK.
Пример работы программы: существует некий онлайн-кинотеатр, где пользователь может включить уведомления о новых сериях любимого сериала. Тогда в момент события — выхода новой серии — онлайн-кинотеатр отправляет сообщение, в котором содержится информация о событии и список получателей, в обменник, а затем — в нужную очередь. Потом эти данные направляются получателю, который их обрабатывает и посылает ACK.
Где и зачем нужен RabbitMQ
В целом, RabbitMQ используется тогда, когда необходимо обеспечить стабильный обмен данными между составляющими системы.
Преимущества инструмента:
- масштабируемость;
- возможность мониторинга и управления;
- надежность — данные будут оставаться в очереди, пока получатель не направит подтверждение;
- асинхронность — отправителю не нужно ждать подтверждения получателя для продолжения работы, что повышает отказоустойчивость и производительность.
Где еще применяется брокер:
- В микросервисных архитектурах для обеспечения независимой работы каждого сервиса и обмена данными между ними.
- При интеграции систем — брокер служит связующим звеном между системами и также отвечает за обмен данными между ними.
- При фоновой обработке данных: отправка уведомлений, создание отчетов, загрузка файлов и другие. Здесь ключевую роль играет асинхронность. Фоновые операции выполняются в соответствии с их характеристиками: длительность, ресурсоемкость, срочность. То есть, ресурсы распределяются и используются эффективно, а основной поток программы при этом не блокируется.
Разница между Apache Kafka и RabbitMQ
Apache Kafka — это тоже брокер сообщений, который часто сравнивают с RabbitMQ, однако они имеют немало различий.
RabbitMQ:
- Цель проекта — создание платформы для надежной передачи данных с акцентом на гибкость маршрутизации и интеграцию с другими системами.
- Пользователю не нужно запрашивать данные, брокер отправляет их сам: модель умный сервер/тупой клиент. Данные хранятся в очередях до того момента, пока получатель их не обработает и не пришлет подтверждение.
- Поддержка очередей с приоритетом. То есть, сообщения с более высоким приоритетом обрабатываются в первую очередь.
- Поддержка множества протоколов: AMQP, MQTT, STOMP и HTTP.
- Подходит для передачи данных между частями/сервисами одной системы, отслеживания и настройки этой передачи, настройки сложной маршрутизации. Также применяется для распределения фоновых задач в асинхронном формате. Используется для системной интеграции, или system integration, — процесса объединения нескольких систем для совместного использования данных и функций.
Apache Kafka:
- Цель проекта — создание платформы, которая будет обрабатывать потоковые данные в реальном времени с высокой пропускной способностью и низкой задержкой.
- Пользователь должен сам запросить данные, при этом платформа не проверяет, получил ли их пользователь: модель умный клиент/тупой сервер. Данные хранятся установленный промежуток времени.
- Все сообщения рассматриваются как равные. Соответственно, они всегда располагаются в том порядке, в котором поступили.
- Собственный бинарный протокол на основе TCP — это может затруднить интеграцию с другими системами, так как протокол поддерживает только Apache Kafka.
- Лучше всего подходит для потоковой обработки Big Data, например, мониторинга метрик. Эффективен для работы с событиями, например, с транзакциями. Применяется для интеграции данных, или data integration, — процесса объединения данных из разных источников в единое представление.
Можно сказать, что среди этих инструментов нет худшего и лучшего, так как их применение сильно отличается: разные назначения, характеристики и сильные стороны. Поэтому при выборе платформы необходимо учитывать потребности конкретного проекта.
Заключение
RabbitMQ — это широко распространенный и мощный инструмент, который используется для обмена данными между сервисами. Он обладает гибкостью маршрутизации благодаря таким компонентам, как обменник и привязки. Маршрутизировать данные по очередям можно различными параметрами: платформа предоставляет встроенные типы распределения.
Второй особенностью, и скорее даже преимуществом является асинхронная обработка данных, позволяющая удерживать высокий уровень производительности и поддерживать независимость компонентов системы. Это преимущество также позволяет назвать инструмент подходящим для выполнения фоновых операций.
Платформа контролирует получение сообщений: пока получатель не направит подтверждение, данные будут оставаться в очереди. Работать с этим инструментом можно как в небольших, так и в крупных проектах благодаря легкой масштабируемости.
Инструмент идеально подходит для интеграции систем и сервисов, что актуально в современном мире, где мало систем существуют самостоятельно, чаще они связаны между собой.
Заключительная и немаловажная деталь — обмен данными не происходит сам по себе. Администраторы платформы всегда могут просматривать очереди, обменники, привязки и другие параметры, управлять обменом, а также получать уведомления об ошибках.