Очередь сообщений RocketMQ — это профессиональное промежуточное программное обеспечение для сообщений, независимо разработанное Alibaba Group.Основываясь на технологии распределенного кластера с высокой доступностью, он предоставляет ряд облаков сообщений, таких как подписка на сообщения и публикация, запрос отслеживания сообщений, синхронизация (отложенных) сообщений, статистика ресурсов. , а также мониторинг и оповещение.Сервис является основным продуктом архитектуры Интернета на уровне предприятия. Очередь сообщений RocketMQ имеет более чем 9-летнюю историю.Она обеспечивает асинхронную развязку и возможности пикового сглаживания и заполнения долины для распределенных систем приложений.В то же время она обладает характеристиками, необходимыми для интернет-приложений, такими как массовое накопление сообщений, высокая пропускная способность и надежные повторные попытки 11. Это двойной основной продукт Alibaba.
Очередь сообщений RocketMQ является официальным коммерческим продуктом Alibaba Cloud. В настоящее время он обеспечивает высокодоступные облачные службы сообщений в нескольких регионах (регионах) Alibaba Cloud. Он развернут в нескольких компьютерных залах в одном домене и имеет высокую доступность. Даже если весь компьютерный зал недоступен, его все равно можно использовать для приложения. Приложение предоставляет услугу публикации сообщений, а стабильность и доступность продукта полностью реализованы в соответствии с внутренними стандартами Alibaba, без единой точки.
Очередь сообщений RocketMQ в настоящее время предоставляет методы доступа на уровне протоколов TCP и HTTP и поддерживает семь языков программирования: Java, C++, .NET, Go, Python, Nodejs и PHP, так что приложения, разработанные на разных языках программирования, могут быстро получить доступ к очереди сообщений облачной службы сообщений RocketMQ. Пользователи могут развертывать приложения в Alibaba Cloud ECS, корпоративных собственных облаках или встроенных в мобильные терминалы и устройства IoT, чтобы установить соединение с очередью сообщений RocketMQ для отправки и получения сообщений.В то же время локальные разработчики также могут получить доступ к очереди сообщений RocketMQ. службы через общедоступную сеть Отправка и получение сообщений.
Особенности продукта
Очередь сообщений RocketMQ обеспечивает доступ к нескольким языкам программирования на основе протоколов TCP и HTTP и средствам многомерного управления, а также предоставляет ряд специальных функций для различных сценариев приложений.
Обзорная карта функций
Поддержка нескольких протоколов
-
Поддержка протокола HTTP: использование стандарта RESTful, простота использования, быстрый доступ, широкие возможности межсетевого взаимодействия и поддержка клиентов на семи языках.
-
Поддержка протокола TCP: в отличие от простого метода доступа HTTP, он обеспечивает доступ SDK с более профессиональным, надежным и стабильным протоколом TCP.
-
Поддержка протокола STOMP: механизм простого текстового протокола, аналогичный HTTP, обычно используемый в языках сценариев (таких как Ruby, Python, Perl) и очередь сообщений RocketMQ Broker для легкого взаимодействия.
инструменты управления
-
Веб-консоль: поддерживает управление темами, управление производителями, управление потребителями, запрос сообщений, отображение и запрос дорожки сообщений, отчет о ресурсах, а также мониторинг и управление аварийными сигналами.
-
OpenAPI: предоставляет API для простой интеграции инструмента управления очередью сообщений RocketMQ в вашу собственную консоль.
-
Набор команд mqadmin: собственный облачный вывод предоставляет богатый набор команд управления для управления службой очереди сообщений RocketMQ в командном режиме.
специальная функция
-
Обмен транзакционными сообщениями: реализует функциональные возможности распределенных транзакций, подобные X/Open XA, для достижения согласованности транзакций в конечном итоге.
-
Временное (отложенное) сообщение. Разрешить производителям сообщений указывать временную (отложенную) доставку сообщений, до 40 дней.
-
Большие сообщения: поддерживаются сообщения размером до 4 МБ.
-
Отслеживание сообщений: благодаря отслеживанию сообщений можно четко определить полную ссылку на сообщение, отправленное издателем и доставленное подписчику сообщений через сервер очереди сообщений RocketMQ, что удобно для обнаружения и устранения проблем.
-
Широковещательное потребление: все потребители, идентифицированные одним и тем же идентификатором группы, могут использовать сообщение один раз.
-
Последовательные сообщения: разрешить потребителям сообщений использовать сообщения в том порядке, в котором они были отправлены.
-
Сбросить прогресс потребления: сбросить прогресс потребления в соответствии со временем, что позволяет пользователям отменять сообщения или удалять накопленные сообщения.
-
Очередь недоставленных сообщений: храните неиспользуемые сообщения в специальной очереди недоставленных сообщений для последующей обработки.
-
Глобальная маршрутизация сообщений: используется для синхронной репликации сообщений между различными регионами по всему миру для обеспечения согласованности данных между регионами.
Собственное облачное развертывание
-
Экспертная настройка: разработка технического решения, экспертная техническая поддержка и обучение на месте.
-
Гибкое развертывание: поддержка независимого развертывания проприетарной облачной и гибридной облачной архитектуры.
-
Управление эксплуатацией и обслуживанием: собственное облако поддерживает набор команд mqadmin, открытый API.
-
Инструмент управления эксплуатацией и обслуживанием облегчает интеграцию платформ управления и контроля, а также унифицированную эксплуатацию и техническое обслуживание.
Модель обмена сообщениями
Очередь сообщений RocketMQ поддерживает модель "публикация/подписка". Издатель сообщения (производитель) может отправить сообщение в тему (тему) на сервере, а несколько получателей сообщений (потребителей) подписываются на эту тему для получения сообщения, как следует Как показано на рисунке:
Topic
Тема сообщения, тип сообщения первого уровня, классифицирует сообщения по темам.
Message
Сообщение, носитель передачи информации в очереди сообщений.
Message ID
Глобальный уникальный идентификатор сообщения, который автоматически генерируется системой очереди сообщений RocketMQ и однозначно идентифицирует сообщение.
Message Key
Бизнес-идентификатор сообщения, установленный производителем сообщения (Producer), однозначно идентифицирует бизнес-логику.
Tag
Метка сообщения, тип сообщения второго уровня, используется для дальнейшего различения классификации сообщения по теме.
Producer
Производители сообщений, также известные как издатели сообщений, отвечают за создание и отправку сообщений.
Экземпляр производителя
Экземпляр объекта Producer. Разные экземпляры Producer могут выполняться в разных процессах или на разных компьютерах. Экземпляры-производители являются потокобезопасными и могут совместно использоваться несколькими потоками в рамках одного процесса.
Consumer
Потребители сообщений, также известные как подписчики сообщений, отвечают за получение и потребление сообщений.
Экземпляр потребителя
Экземпляр объекта Consumer. Различные экземпляры Consumer могут работать в разных процессах или на разных машинах. Пул потоков настроен в экземпляре Consumer для использования сообщений.
Group
Тип производителя или потребителя. Этот тип производителя или потребителя обычно создает или потребляет сообщения одного и того же типа, и логика публикации сообщений или подписки согласуется.
Group ID
Идентификатор группы.
Семантика доставки Exactly-Once
Семантика однократной доставки означает, что сообщение, отправленное в систему сообщений, может быть обработано только потребителем и только один раз.Даже если производитель повторяет попытку отправки сообщения и вызывает повторную доставку сообщения, сообщение будет использовано только один раз потребитель.
Потребление кластера
Все потребители, идентифицированные идентификатором группы, одинаково разделяют сообщения о потреблении. Например, если тема имеет 9 сообщений, а идентификатор группы имеет 3 экземпляра потребителя, то в режиме потребления кластера каждый экземпляр распределяется равномерно, и потребляются только 3 сообщения.
широковещательное потребление
Все потребители, идентифицированные идентификатором группы, будут потреблять сообщение один раз. Например, если тема имеет 9 сообщений, а идентификатор группы имеет 3 экземпляра потребителя, то каждый экземпляр будет потреблять 9 сообщений в режиме широковещательного потребления.
сообщение по времени
Производитель отправляет сообщение на сервер RocketMQ очереди сообщений, но не ожидает, что сообщение будет доставлено немедленно, а откладывает доставку Потребителю для потребления в определенное время после текущей временной точки.Сообщение является сообщением с синхронизацией.
Отложенное сообщение
Производитель отправляет сообщение на сервер RocketMQ очереди сообщений, но не ожидает, что сообщение будет доставлено немедленно, а доставляется Потребителю для потребления после определенной задержки.Сообщение является задержанным сообщением.
сообщение о транзакции
Очередь сообщений RocketMQ предоставляет функцию распределенных транзакций, аналогичную X/Open XA, а сообщения о транзакциях очереди сообщений RocketMQ могут обеспечить окончательную согласованность распределенных транзакций.
последовательное сообщение
Очередь сообщений RocketMQ предоставляет тип сообщений, которые публикуются и используются последовательно, которые делятся на глобальные последовательные сообщения и секционированные последовательные сообщения.
сообщение о глобальном заказе
Для указанной темы все сообщения публикуются и используются в строгом порядке «первым пришел — первым обслужен» (FIFO).
Сообщение о порядке разделения
Для указанной темы все сообщения разделяются в соответствии с ключом сегментирования. Сообщения в одном разделе публикуются и потребляются в строгом порядке FIFO. Ключ разделения — это ключевое поле, используемое для различения разных разделов в последовательных сообщениях, и это совершенно другое понятие, чем ключ обычных сообщений.
сообщения накапливаются
Производитель отправил сообщение на сервер очереди сообщений RocketMQ, но из-за ограниченной мощности потребления Потребителя он не может корректно потреблять все сообщения за короткое время.В это время сервер очереди сообщений RocketMQ сохраняет неиспользованные сообщения.Это состояние является накоплением сообщений.
фильтрация сообщений
Потребители могут фильтровать сообщения на основе тегов сообщений (Tag), чтобы в конечном итоге потребители получали только отфильтрованные типы сообщений. Фильтрация сообщений выполняется на стороне сервера очереди сообщений RocketMQ.
трек сообщения
В процессе отправки сообщения от производителя к потребителю подписчика полная информация о ссылке агрегируется по времени, местоположению и другим данным каждого соответствующего узла. Благодаря трассировке сообщений вы можете четко определить полную ссылку на сообщение, отправленное производителем и доставленное потребителю сообщений через сервер очереди сообщений RocketMQ, что удобно для обнаружения и устранения неполадок.
сброс потребления
Принимая ось времени за координату, в пределах временного диапазона постоянного хранения сообщений (по умолчанию 3 дня) сбросьте ход потребления сообщений потребителями, подписавшимися на тему.После завершения настройки подписчик получит производителя сообщения после установленный момент времени Сообщение, отправленное на сервер очереди сообщений RocketMQ.
очередь недоставленных сообщений
Очереди недоставленных сообщений используются для обработки сообщений, которые невозможно использовать в обычном режиме. Когда сообщение не может быть использовано в первый раз, очередь сообщений RocketMQ автоматически повторит попытку сообщения; после достижения максимального количества попыток, если потребление все еще не удается, это означает, что потребитель не может правильно использовать сообщение при нормальных обстоятельствах. В это время очередь сообщений RocketMQ Сообщение не отбрасывается сразу, а отправляется в специальную очередь, соответствующую этому потребителю.
Очередь сообщений RocketMQ называет такие сообщения, которые не могут быть использованы при нормальных обстоятельствах, как недоставленные сообщения, а специальные очереди, в которых хранятся недоставленные сообщения, называются очередями недоставленных сообщений.
маршрутизация сообщений
Маршрутизация сообщений часто используется для синхронизации сообщений между разными регионами, чтобы обеспечить согласованность данных между регионами. Очередь сообщений Функция глобальной маршрутизации сообщений RocketMQ опирается на выделенную линию высокоскоростного канала, реализованную высококачественной инфраструктурой Alibaba Cloud, которая может эффективно осуществлять синхронизацию и репликацию сообщений между различными регионами дома и за границей.
Очередь сообщений RocketMQ масштабируется в любой среде.Публикатор должен быть кластером, сервер сообщений должен быть кластером, а подписчики должны быть одинаковыми. Высокая доступность на уровне кластера является основным отличием очереди сообщений RocketMQ от других серверов сообщений.Издатель сообщения (производитель) отправляет сообщение на сервер сообщений, и сервер сообщений случайным образом выбирает потребителя (потребителя), пока потребитель потребляет Мы считаем успех успехом.
Примечание. Сервер или сервер очереди сообщений RocketMQ, упомянутый в этой статье, включает Name Server, Broker и т. д. Сервер не совпадает с брокером.
Архитектура развертывания системы
Архитектура развертывания системы показана на следующем рисунке.
Понятия, используемые в диаграмме, следующие:
-
Сервер имен: это почти не сохраняющий состояние узел, который можно развернуть в кластерах, предоставляя службы именования в очереди сообщений RocketMQ, обновляя и обнаруживая службы брокера.
-
Брокер: он делится на мастер-брокер и подчиненный брокер.Один мастер-брокер может соответствовать нескольким подчиненным брокерам, но один подчиненный брокер может соответствовать только одному главному брокеру. После запуска брокера ему необходимо выполнить операцию регистрации на сервере имен, затем он периодически передает информацию о маршрутизации тем на сервер имен каждые 30 секунд.
-
Производитель: устанавливает длинную ссылку (Keep-alive) с одним из узлов (случайным образом) в кластере серверов имен, регулярно считывает информацию о маршрутизации темы с сервера имен, устанавливает длинную ссылку на главного брокера, который предоставляет услуги темы, и регулярно обменивается данными с мастер-брокером. Отправить пульс.
-
Потребитель: устанавливает длительное соединение с одним из узлов (случайным образом) в кластере серверов имен, регулярно извлекает информацию о маршрутизации темы с сервера имен, устанавливает длительное соединение с главным посредником и подчиненным посредником, которые предоставляют услуги темы, и регулярно отправляет на Мастер-брокер и ведомый посредник посылают сердечные импульсы. Потребители могут подписаться на сообщения либо от главного брокера, либо от подчиненного брокера.Правила подписки определяются конфигурацией брокера.
модель подписки
Режим подписки очереди сообщений RocketMQ принимает режим публикации/подписки (режим Pub/Sub), как показано на следующем рисунке.
Кластер производителей: используется для представления приложения, отправляющего сообщения.Кластер производителей содержит несколько экземпляров производителей, которые могут быть несколькими машинами, несколькими процессами одной машины или несколькими объектами-производителями одного процесса. Кластер Producer может отправлять несколько сообщений Topic. Вполне возможно, что при отправке сообщения распределенной транзакции, если производитель неожиданно выходит из строя посередине, брокер будет активно перезванивать любой машине в кластере производителей, чтобы подтвердить статус транзакции.
Кластер потребителей: используется для представления приложения потребления сообщений.Кластер потребителей содержит несколько экземпляров потребителей, которые могут быть несколькими машинами, несколькими процессами или несколькими объектами-потребителями процесса. Несколько потребителей в кластере потребителей потребляют сообщения равномерным образом. Если установлен широковещательный режим, то каждый экземпляр в кластере-потребителе потребляет весь объем данных.
Потребитель соответствует идентификатору группы, а идентификатор группы может подписаться на несколько тем, как показано в группе 1 на рисунке. Отношения подписки между Группой и Темой могут быть установлены непосредственно в программе.
Примечание: ваш сегодняшний успех зависит от вашего вчерашнего отношения, а ваше сегодняшнее отношение определяет ваш успех завтра.