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 )