1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mqtt-rs-rmqtt

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
bridge-ingress-mqtt.md 10 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 14:56 2a97644

MQTT-бридинг в режиме Ingress

Бридинг данных MQTT — это способ соединить несколько кластеров RMQTT или других сервисов MQTT. В режиме Ingress локальный RMQTT подписывается на темы с удалённого сервера MQTT и распределяет полученные сообщения внутри текущего кластера.

Параллельные соединения

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

В режиме Ingress, если у вас есть кластер RMQTT с несколькими узлами и вы настраиваете входящий MQTT-бридж для подписки на не общие темы с удалённого MQTT-сервера, все клиенты моста на узлах будут получать повторяющиеся сообщения от удалённого MQTT-сервера, если они подписаны на одну и ту же тему или если количество параллельных подключений больше одного, что создаёт нагрузку на сервер. В этом случае настоятельно рекомендуется использовать общие подписки в качестве меры безопасности. Например, вы можете настроить тему удалённого MQTT-сервера как $share/group1/topic1 или, используя фильтры тем, настроить её как $share/group2/topic2/#. В сценариях без общих подписок количество параллельных MQTT-подключений будет сокращено до одного клиента, то есть будет активен только один клиент.

Из-за требования протокола MQTT, согласно которому клиенты, подключающиеся к MQTT-серверу, должны иметь уникальные идентификаторы клиентов, каждому клиенту в параллельных подключениях присваивается уникальный идентификатор клиента. RMQTT автоматически генерирует идентификаторы клиентов на основе следующего шаблона для предсказуемости:

${client_id_prefix}:${bridge_name}:ingress:${node_id}:${subscribe_entry_index}:${client_no}
Сегмент Описание
${client_id_prefix} Настроенный префикс идентификатора клиента
${bridge_name} Имя моста
${node_id} Идентификатор узла, на котором работает MQTT-клиент
${subscribe_entry_index} Индекс записи подписки
${client_no} Число от 1 до настроенного ограничения на количество параллельных подключений MQTT-клиентов

Плагин:

rmqtt-bridge-ingress-mqtt

Файл конфигурации плагина:

plugins/rmqtt-bridge-ingress-mqtt.toml

Структура файла конфигурации плагина:

[[bridges]]
name = "bridge_name_1"
connection configuration
[[bridges.entries]]
subscription configuration
[[bridges.entries]]
subscription configuration

[[bridges]]
name = "bridge_name_2"
connection configuration
[[bridges.entries]]
subscription configuration
[[bridges.events]]
subscription configuration

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

Параметры конфигурации плагина:

[[bridges]]
# Включить или отключить, значения: true/false, по умолчанию: true
enable = true
# Имя моста
name = "bridge_name_1"
# Префикс идентификатора клиента
client_id_prefix = "prefix"
# Адрес и порт удалённого брокера MQTT
server = "127.0.0.1:1883"
# Имя пользователя для подключения к удалённому брокеру MQTT
username = "rmqtt_u"
# Пароль для подключения к удалённому брокеру MQTT
password = "public"

# Максимальное ограничение для параллельных клиентов, подключающихся к удалённому брокеру MQTT (с той же подпиской), рекомендуется общая подписка
concurrent_client_limit = 5
# Тайм-аут подключения
connect_timeout = "20s"
# Интервал сохранения активности
keepalive = "60s"
# Интервал автоматического переподключения
reconnect_interval = "5s"
# Поддержка сохранённых сообщений, значения: true/false, по умолчанию: false
retain_available = false
# Интервал истечения срока действия сообщения, 0 означает отсутствие срока действия
expiry_interval = "5m"
# Версия протокола MQTT, значения: v4, v5, соответствует MQTT 3.1.1, 5.0
mqtt_ver = "v4"

# Следующие конфигурации относятся к протоколу
``` # Версия

# Очистка состояния сессии
v4.clean_session = true

# Конфигурация последнего сообщения, опционально
# Метод кодирования сообщения, поддерживается plain и base64, по умолчанию: plain
v4.last_will = {qos = 0, retain = false, topic = "a/b/c", message = "message content", encoding = "plain"}

# Или

# Очищать состояние сессии при подключении
v5.clean_start = true

# Интервал истечения сессии, 0 означает, что сессия завершится сразу после отключения от сети
v5.session_expiry_interval = "0s"

# Ограничить максимальное количество сообщений QoS 1 и QoS 2, которые клиент может обрабатывать одновременно
v5.receive_maximum = 16

# Согласовать максимальный размер пакета с клиентом и сервером
v5.maximum_packet_size = "1M"

# Согласовать максимальное количество псевдонимов тем с клиентом и сервером
v5.topic_alias_maximum = 0

# Конфигурация последнего сообщения, опционально
v5.last_will = {qos = 0, retain = false, topic = "a/b/c", message = "message content", encoding = "plain"}

[[bridges.entries]]

# Качество обслуживания подписки, значения: 0,1,2, по умолчанию: 0
remote.qos = 0

# Тема подписки
remote.topic = "$share/g/remote/topic1/ingress/#"

# Качество обслуживания пересылки, значения: 0,1,2 или не установлено (то же, что и качество обслуживания сообщения)
local.qos = 1

# Тема пересылки, поддерживает подстановку темы сообщения ${remote.topic}
local.topic = "local/topic1/ingress/${remote.topic}"

# Сохранять сообщение, значения: true/false, по умолчанию: false
local.retain = true

[[bridges.entries]]

# Качество обслуживания подписки, значения: 0,1,2, по умолчанию: 0
remote.qos = 1

# Тема подписки
remote.topic = "$share/g/remote/topic2/ingress"

# Качество обслуживания пересылки, значения: 0,1,2 или не установлено (то же, что и качество обслуживания сообщения)
# local.qos = 0

# Тема пересылки
local.topic = "local/topic2/ingress"

# Сохранять сообщение, значения: true/false, по умолчанию: false
local.retain = false

Этот плагин по умолчанию не включён. Чтобы активировать его, необходимо добавить запись `rmqtt-bridge-ingress-mqtt` в конфигурацию `plugins.default_startups` в основном файле конфигурации `rmqtt.toml`, как показано ниже:
```bash
##--------------------------------------------------------------------
## Plugins
##--------------------------------------------------------------------
# Каталог конфигурационных файлов плагинов
plugins.dir = "rmqtt-plugins/"
# Плагины, запускаемые по умолчанию при запуске сервера mqtt
plugins.default_startups = [
    #"rmqtt-plugin-template",
    #"rmqtt-retainer",
    #"rmqtt-auth-http",
    #"rmqtt-cluster-broadcast",
    #"rmqtt-cluster-raft",
    #"rmqtt-sys-topic",
    #"rmqtt-message-storage",
    #"rmqtt-session-storage",
    "rmqtt-bridge-ingress-mqtt",
    "rmqtt-web-hook",
    "rmqtt-http-api"
]

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mqtt-rs-rmqtt.git
git@api.gitlife.ru:oschina-mirror/mqtt-rs-rmqtt.git
oschina-mirror
mqtt-rs-rmqtt
mqtt-rs-rmqtt
master