Сервис распределенных сообщений (DMS) for RocketMQ — это ориентированное на сообщения промежуточное ПО, обеспечивающее низкую задержку, высокую гибкость, высокую пропускную способность, динамическое масштабирование, простое управление и обширные функции обмена сообщениями.
DMS for RocketMQ имеет следующие функции:
- Совместимость с клиентами RocketMQ с открытым исходным кодом.
- Обширные функции обмена сообщениями, включая упорядоченную доставку сообщений, отложенные сообщения, плановые сообщения, повторную отправку сообщений, сообщения dead letter и транзакционные сообщения, которые удовлетворяют разнообразные потребности в сценариях электронной коммерции и финансов.
- Функции мониторинга и анализа, включая трассировку сообщений, отслеживание сообщений, анализ трассировок, экспорт сообщений dead letter, мониторинг и оповещения, позволяющие вам отслеживать ваши сервисы и поддерживать их работу.
Архитектура продукта
Рисунок 1 Архитектура продукта (экземпляра v4.8.0)

Описание архитектуры:
- Брокеры получают и сохраняют сообщения, отправленные продюсерами, либо пересылают сообщения потребителям. Брокер состоит из одного мастера и двух слейв‑узлов.
- NameServers получают и сохраняют метаданные брокера.
- Продюсеры получают метаданные от NameServers и отправляют сообщения брокерам.
- Потребители получают метаданные от NameServers и затем вытягивают сообщения из брокеров.
Типы сообщений
DMS for RocketMQ поддерживает четыре типа сообщений.
- Обычные сообщения: сообщения, не имеющие никаких особенностей отложенных сообщений, упорядоченных сообщений или транзакционных сообщений.
- Отложенные/Запланированные сообщения: сообщения, доставляемые потребителям после определённого периода после отправки продюсерами в DMS for RocketMQ.
- Упорядоченные сообщения: сообщения, извлекаемые в точном порядке их создания.
- Транзакционное сообщение: сообщения, обеспечивающие окончательную согласованность, реализующие распределённую обработку транзакций, аналогичную X/Open XA.
Расширенные возможности
DMS for RocketMQ предоставляет четыре расширенных функции.
- Фильтрация сообщений: Потребители могут помечать сообщения в подписанных темах, чтобы получать только необходимые сообщения.
- Повторная отправка сообщений: DMS for RocketMQ повторно отправляет сообщения, которые не удалось потребить. Если потребление сообщений всё ещё не удаётся после достижения максимального количества повторов, сообщения отправляются в очередь dead letter.
Таблица 1 описывает механизм повторов в DMS for RocketMQ.
Таблица 1 Механизм повторной отправки сообщений Тип получения
Интервал повторов
Максимальное количество повторов
Упорядоченное получение
Интервал задаётся suspendTimeMillis параметр.
Интервал по умолчанию — 1000 мс, то есть 1 с.
Максимальное количество повторов задаётся setMaxReconsumeTimes метод у потребителя. Если этот параметр не установлен, будет неограниченное количество повторных попыток.
Обычное извлечение
Интервал меняется в зависимости от номера повторной попытки, как показано в Таблица 2.
Устанавливается при создании группы потребителей.
Диапазон значений: 1–16 раз
Таблица 2 Интервалы между повторными попытками при обычных извлечениях Повтор №
Интервал
Повтор №
Интервал
1
10s
9
7 мин
2
30s
10
8 мин
3
1 мин
11
9 мин
4
2 мин
12
10 мин
5
3 мин
13
20 мин
6
4 мин
14
30 мин
7
5 мин
15
1 ч
8
6 мин
16
2 ч
- Отложенные сообщения: После того как они отправлены от производителей в DMS для RocketMQ, сообщения доставляются потребителям только после a фиксированный период. Производитель может указать один из 18 уровней задержки, перечисленных в Таблица 3.
Таблица 3 Уровни задержки Уровень задержки
Задержка
Уровень задержки
Задержка
1
1s
10
6 мин
2
5s
11
7 мин
3
10s
12
8 мин
4
30 сек
13
9 мин
5
1 мин
14
10 мин
6
2 мин
15
20 мин
7
3 мин
16
30 мин
8
4 мин
17
1 ч
9
5 мин
18
2 ч
- Запланированные сообщения: После отправки от продюсеров в DMS for RocketMQ сообщения доставляются потребителям только после указанного момента времени. DMS for RocketMQ поддерживает планирование сообщений в в любое время. Для v4.8.0, её можно запланировать до года вперёд. Для v5.x, её можно запланировать до семи дней вперёд. Планирование можно отменить.