Свойства пользователя — новые возможности MQTT 5.0

MQTT v5 имеет много новых функций. Мы постараемся показать эти функции в доступной для понимания форме и обсудим влияние этих функций на разработчиков. До сих пор мы обсуждали эти Новые возможности MQTT v5. Сегодня мы продолжим обсуждение: Свойства пользователя.

Что такое свойства пользователя?

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

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

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

Зачем нам нужны пользовательские свойства?

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

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

Пользовательские свойства подключенного клиента

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

Свойства пользователя во время публикации сообщения

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

В дополнение к вышеупомянутым настройкам Свойства пользователя, вы также можете настроить Свойства пользователя при подписке на Тему, отписке или отключении.

Использование пользовательских свойств

Передача файлов

Пользовательские свойства МКТТ 5 может быть расширен для передачи файлов вместо того, чтобы помещать данные в полезную нагрузку тела сообщения и использовать пары ключ-значение для свойств пользователя в предыдущем MQTT 3. Это также означает, что файл может храниться как двоичный, поскольку метаданные файла в свойствах пользователя. Например:

{
  "filename": "test.txt",
  "content": "xxxx"
}

Анализ ресурсов

Когда клиент подключается к MQTT Broker, разные клиенты и платформы или системы от разных поставщиков передают данные сообщения по-разному. Могут быть структурные различия в формате данных сообщений, а некоторые клиенты распределены по разным регионам. Например, формат сообщения, отправляемого устройством в регионе A, — это JSON, а формат сообщения, отправляемого устройством в регионе B, — XML. В это время серверу может потребоваться оценить и сравнить одно за другим после получения сообщения, чтобы найти подходящий синтаксический анализатор для анализа данных.

Чтобы повысить эффективность и снизить вычислительную нагрузку, мы можем использовать функцию «Свойства пользователя», чтобы добавить информацию о формате данных и географическую информацию. Когда сервер получает сообщение, он может использовать метаданные в свойствах пользователя для анализа данных. Более того, когда клиентская подписка области A получает сообщение клиента из области B, она также может быстро узнать, из какой области пришло конкретное сообщение, чтобы сообщение можно было отследить.

{
  "region": "A",
  "type": "JSON"
}

Анализ ресурсов MQTT

Маршрутизация сообщений

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

{
  "type": "real-time",
  "timestamp": 1636620444
}

Маршрутизация сообщений MQTT

Как настроить в клиенте MQTT

Давайте рассмотрим пример программирования на JavaScript, используя MQTT.js клиент. Сначала мы можем указать версию MQTT как MQTT 5.0 при подключении к клиенту.

Соединять

При подключении задаем User Properties в опциях свойств и добавляем свойства типа и региона. После успешного подключения MQTT Broker получит это определяемое пользователем сообщение.

// connect options
const OPTIONS = {
  clientId: 'mqtt_test',
  clean: true,
  connectTimeout: 4000,
  username: 'emqx',
  password: 'public',
  reconnectPeriod: 1000,
  protocolVersion: 5,
  properties: {
    userProperties: {
      region: 'A',
      type: 'JSON',
    },
  },
}
const client = mqtt.connect('mqtt://broker.emqx.io', OPTIONS)

Публикация сообщений

После успешного подключения подписываемся и выбираем публикацию сообщения и устанавливаем Свойства пользователя в конфигурации публикации сообщений. Затем отслеживаем прием сообщения. В функции публикации мы настраиваем свойства пользователя. Мы распечатываем пакет, чтобы увидеть только что настроенные свойства пользователя в функции, которая прослушивает и получает сообщение.

client.publish(topic, 'nodejs mqtt test', {
  qos: 0,
  retain: false,
  properties: {
    userProperties: {
      region: 'A',
      type: 'JSON',
    },
  },
}, (error) => {
  if (error) {
    console.error(error)
  }
})
client.on('message', (topic, payload, packet) => {
  console.log('packet:', packet)
  console.log('Received Message:', topic, payload.toString())
})

На данный момент мы видим, что Свойства пользователя, настроенные непосредственно перед публикацией, были распечатаны и выведены в консоль.

Для других клиентов мы сначала будем поддерживать определяемую пользователем функцию конфигурации для свойств пользователя в последующих версиях кросс-платформенного Клиентский инструмент MQTT 5.0 для настольных ПК — MQTT X, что позволяет пользователям быстро протестировать некоторые новые функции MQTT 5.0. Пожалуйста, с нетерпением ждите этого!

Первоначально опубликовано на

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *