Функции MQTT, поддерживаемые компонентом брокера MQTT Сетка событий Azure

MQTT — это протокол транспорта обмена сообщениями с подпиской на публикацию, предназначенный для ограниченных сред. Это эффективно, масштабируемо и надежно, что сделало его золотым стандартом для обмена данными в сценариях Интернета вещей. Брокер MQTT поддерживает клиенты, которые публикуют и подписываются на сообщения через MQTT версии 3.1.1, MQTT версии 3.1.1 через WebSockets, MQTT v5 и MQTT v5 по webSockets. Брокер MQTT также поддерживает межкрестную версию MQTT (MQTT 3.1.1 и MQTT 5).

MQTT версии 5 появилось множество улучшений по сравнению с MQTT версии 3.1.1 для обеспечения более простой, прозрачной и эффективной связи. Добавлено:

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

поток Подключение ion:

Клиенты MQTT должны подключаться через TLS 1.2 или TLS 1.3. Пытается пропустить этот шаг сбоем при подключении.

При подключении к брокеру MQTT используйте следующие порты во время обмена данными через MQTT:

  • MQTT версии 3.1.1 и MQTT версии 5 на TCP-порту 8883
  • MQTT версии 3.1.1 через WebSocket и MQTTv5 через WebSocket на TCP-порте 443.

Пакет CONNECT должен содержать следующие свойства:

  • Поле ClientId является обязательным, и оно должно содержать имя сеанса клиента. Имя сеанса должно быть уникальным в пространстве имен. Имя проверки подлинности клиента можно использовать в качестве имени сеанса, если каждый клиент использует один сеанс для каждого клиента. Если один клиент использует несколько сеансов, он должен использовать разные значения для ClientId для каждого сеанса.
  • Поле имени пользователя требуется, если вы не выбрали значение в альтернативной версииAuthenticationNameSources во время создания пространства имен. В этом случае необходимо указать имя проверки подлинности клиента в поле имени пользователя. Это имя должно соответствовать указанному имени проверки подлинности и значению в поле сертификата клиента, указанном во время создания клиентского ресурса.

Дополнительные сведения о проверке подлинности клиента.

Поддержка нескольких сеансов

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

Конфигурация пространства имен

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

  • Перейдите в пространство имен в портал Azure.
  • В разделе "Конфигурация" измените значение максимального числа клиентских сеансов на имя проверки подлинности на требуемое количество сеансов на клиента.
  • Выберите Применить.

Примечание.

Для конфигурации Azure CLI обновите свойство MaxClientSessionsPerAuthenticationName в полезных данных пространства имен с требуемым значением.

поток Подключение ion:

Пакеты CONNECT для каждого сеанса должны содержать следующие свойства:

  • Укажите свойство Имени пользователя в пакете CONNECT, чтобы указать имя проверки подлинности клиента.
  • Укажите свойство ClientID в пакете CONNECT, чтобы указать имя сеанса, например одно или несколько значений для clientID для каждого имени пользователя.

Например, следующие сочетания имени пользователя и clientIds в пакете CONNECT позволяют клиенту "Mgmt-application" подключаться к брокеру MQTT через три независимых сеанса:

  • Первый сеанс:
    • Имя пользователя: Mgmt-application
    • Clientid: Mgmt-Session1
  • Второй сеанс:
    • Имя пользователя: Mgmt-application
    • Clientid: Mgmt-Session2
  • Третий сеанс:
    • Имя пользователя: Mgmt-application
    • Clientid: Mgmt-Session3

Схема примера с несколькими сеансами.

Дополнительные сведения см. в разделе "Создание нескольких сеансов для одного клиента".

Обработка сеансов:

  • Если клиент пытается взять на себя активный сеанс другого клиента, указав его имя сеанса с другим именем проверки подлинности, запрос на подключение отклоняется с несанкционированной ошибкой. Например, если клиент B пытается подключиться к сеансу 123, назначенному в то время для клиента A, запрос на подключение клиента B отклоняется. Это говорится, что если тот же клиент пытается повторно подключиться с теми же именами сеансов и тем же именем проверки подлинности, он может взять на себя существующий сеанс.
  • Если ресурс клиента удаляется без завершения сеанса, другие клиенты не могут использовать его имя сеанса до истечения срока действия сеанса. Например, если клиент B создает сеанс с именем сеанса 123, то клиент B удаляется, клиент A не может подключиться к сеансу 123 до истечения срока действия.
  • Ограничение количества сеансов для каждого клиента применяется к сетевым и автономным сеансам в любой момент времени. Например, рассмотрим пространство имен с максимальным числом сеансов клиента на имя проверки подлинности, равное 1. Если клиент A подключается к постоянному сеансу 123, а затем отключается, клиент A не сможет подключиться к новому сеансу 456, так как его сеанс 123 по-прежнему активен, даже если он находится в автономном режиме. Соответственно, рекомендуется, чтобы один и тот же клиент всегда повторно подключается с теми же статическими именами сеансов, а не создавать новое имя сеанса при каждом повторном подключении.

Функции MQTT

компонент брокера MQTT Сетка событий Azure поддерживает следующие функции MQTT:

Качество обслуживания (QoS)

Брокер MQTT поддерживает QoS 0 и 1, которые определяют гарантию доставки сообщений на пакеты PUBLISH и SUBSCRIBE между клиентами и брокером MQTT. QoS 0 гарантирует доставку по крайней мере один раз; сообщения с QoS 0 не признаются подписчиком и не передаются издателем повторно. QoS 1 гарантирует по крайней мере один раз доставки; сообщения признаются подписчиком и повторно передаются издателем, если они не были подтверждены. QoS позволяет клиентам контролировать эффективность и надежность взаимодействия.

Постоянные сеансы

Брокер MQTT поддерживает постоянные сеансы для MQTT версии 3.1.1, таким образом, что брокер MQTT сохраняет сведения о сеансе клиента в случае отключения, чтобы обеспечить надежность взаимодействия. Эти сведения включают подписки клиента и пропущенные/ ненавиденные сообщения QoS 1. Клиенты могут настроить постоянный сеанс, задав флаг cleanSession в пакете CONNECT значение false.

Очистка срока действия запуска и сеанса

MQTT версии 5 представила функции чистого запуска и истечения срока действия сеанса в качестве улучшения по сравнению с MQTT версии 3.1.1 при обработке сохраняемости сеансов. Clean Start — это функция, которая позволяет клиенту запускать новый сеанс с брокером MQTT, не карта используя все предыдущие данные сеанса. Срок действия сеанса позволяет клиенту сообщать брокеру MQTT, когда неактивный сеанс считается истекшим и автоматически удален. В пакете CONNECT клиент может задать для параметра Clean Start флаг true и (или) короткий интервал истечения срока действия сеанса по соображениям безопасности или избежать возможных конфликтов данных, которые могли возникнуть во время предыдущего сеанса. Клиент также может задать для клиента значение false и (или) длительный интервал истечения срока действия сеанса, чтобы обеспечить надежность и эффективность постоянных сеансов.

Максимальная конфигурация интервала истечения срока действия сеанса

Можно настроить максимальный интервал истечения срока действия сеанса для всех клиентов, подключающихся к пространству имен сетки событий. Для клиентов MQTT версии 3.1.1 настроенное ограничение применяется в качестве интервала истечения срока действия сеанса по умолчанию для всех постоянных сеансов. Для клиентов MQTT версии 5 настроенное ограничение применяется в качестве максимального значения для свойства интервала истечения срока действия сеанса в пакете CONNECT; любое значение, превышающее ограничение, корректируется. Значение по умолчанию для этого свойства пространства имен составляет 1 час и может быть продлено до 8 часов. Чтобы настроить максимальный интервал истечения срока действия сеанса в портал Azure, выполните следующие действия.

  • Перейдите в пространство имен в портал Azure.
  • В разделе "Конфигурация" измените значение максимального интервала истечения срока действия сеанса в часах до требуемого предела.
  • Выберите Применить.

Снимок экрана: максимальная конфигурация интервала истечения срока действия сеанса.

Переполнение сеанса

Брокер MQTT сохраняет очередь сообщений для каждого активного сеанса MQTT, который не подключен, пока клиент снова не подключается к брокеру MQTT, чтобы получить сообщения в очереди. Если клиент не подключается к получению сообщений QOS1 в очереди, очередь сеанса начинает накапливать сообщения, пока не достигнет его предела: 100 сообщений или 1 МБ. После того как очередь достигнет предела в течение срока существования сеанса, сеанс завершается.

Последние сообщения Олл и Завещание (LWT)

Last Will and Testament (LWT) уведомляет клиентов MQTT с резким отключением других клиентов MQTT. Вы можете использовать LWT, чтобы обеспечить прогнозируемый и надежный поток обмена данными между клиентами MQTT во время непредвиденных отключений, что полезно для сценариев, когда взаимодействие в режиме реального времени, надежность системы и согласованные действия являются критически важными. Клиенты, которые совместно работают над выполнением сложных задач, могут реагировать на сообщения LWT друг от друга, изменяя их поведение, распространяя задачи или принимая на себя определенные обязанности по поддержанию производительности и стабильности системы. Чтобы использовать LWT, клиент может указать сообщение о будете, раздел и остальные свойства воли в пакете CONNECT во время подключения. Когда клиент резко отключается, брокер MQTT публикует сообщение обо всех клиентах, которые подписаны на раздел. Чтобы уменьшить шум от изменяющихся отключений, клиент может задать интервал задержки в значение больше нуля. В этом случае, если клиент резко отключается, но повторно удаляет подключение до истечения срока действия интервала задержки, сообщение будет опубликовано не будет.

Свойства пользователя

Брокер MQTT поддерживает свойства пользователей в пакетах MQTT версии 5 PUBLISH, которые позволяют добавлять пользовательские пары "ключ-значение" в заголовок сообщения, чтобы обеспечить дополнительный контекст сообщения. Варианты использования свойств пользователей являются универсальными. Эту функцию можно использовать для включения назначения или источника сообщения, чтобы получатель может обрабатывать сообщение без анализа полезных данных, экономии вычислительных ресурсов. Например, сообщение со свойством пользователя, указывающее его назначение как предупреждение, может активировать логику обработки, отличную от одной с целью "информации".

Метод "запроса и ответа"

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

Схема примера шаблона ответа на запрос.

Интервал истечения срока действия сообщения:

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

Псевдонимы раздела:

В MQTT версии 5 псевдонимы раздела позволяют клиенту использовать более короткий псевдоним вместо полного имени раздела в опубликованном сообщении. Брокер MQTT поддерживает сопоставление псевдонима раздела и фактического имени раздела. Эта функция может сохранить пропускную способность сети и уменьшить размер заголовка сообщения, особенно для разделов с длинными именами. Это полезно в сценариях, когда один и тот же раздел неоднократно публикуется в нескольких сообщениях, таких как в сетях датчиков. Брокер MQTT поддерживает до 10 псевдонимов раздела. Клиент может использовать поле "Псевдоним раздела" в пакете PUBLISH, чтобы заменить полное имя раздела соответствующим псевдонимом.

Схема примера псевдонима раздела.

Управление потоком

В MQTT версии 5 управление потоками ссылается на механизм управления скоростью и размером сообщений, которые может обрабатывать клиент. Элемент управления потоком можно настроить, задав максимальный размер пакета и параметры получения максимального значения в пакете CONNECT. Параметр Receive Maximum позволяет клиенту ограничить количество сообщений, отправляемых брокером, до количества сообщений, которые клиент может обрабатывать. Параметр "Максимальный размер пакета" определяет максимальный размер пакетов, которые может получать клиент. Брокер MQTT имеет ограничение размера сообщения 512 КиБ. Эта функция обеспечивает надежность и стабильность взаимодействия для ограниченных устройств с ограниченными возможностями обработки или хранилища.

Отрицательные подтверждения и пакет отключения, инициированные сервером

Для MQTT версии 5 брокер MQTT может отправлять отрицательные подтверждения (NACKs) и пакеты отключения, инициированные сервером, которые предоставляют клиенту дополнительные сведения о сбоях доставки сообщений или подключения. Эти функции помогают клиенту диагностировать причину сбоя и принимать соответствующие действия по устранению неполадок. Брокер MQTT использует коды причин, определенные в спецификации MQTT версии 5.

Текущие ограничения

Брокер MQTT добавляет дополнительные возможности MQTT версии 5 и MQTT версии 3.1.1 в будущем, чтобы выровнять больше с спецификациями MQTT. В следующем списке описаны текущие различия между функциями, поддерживаемыми брокером MQTT и спецификациями MQTT:

Текущие ограничения MQTTv5

MQTT v5 в настоящее время отличается от спецификации MQTT v5 следующим образом:

  • Общие подписки пока не поддерживаются.
  • Сохранить флаг еще не поддерживается.
  • Максимальный интервал задержки составляет 300.
  • Максимальное значение QoS равно 1.
  • Максимальный размер пакета — 512 КИБ
  • Порядок сообщений не гарантируется.
  • Идентификаторы подписок не поддерживаются.
  • Назначенные идентификаторы клиента пока не поддерживаются.
  • Максимальное значение псевдонима раздела — 10. Сервер не назначает псевдонимы разделов для исходящих сообщений в настоящее время. Клиенты могут назначать и использовать псевдонимы разделов в пределах заданного ограничения.
  • CONNACK не возвращает свойство "Сведения об ответе", даже если запрос CONNECT содержит свойство "Сведения о ответе запроса".
  • Свойства пользователей в CONNECT, SUBSCRIBE, DISCONNECT, PUBACK, AUTH-пакеты не используются службой, поэтому они не поддерживаются. Если любой из этих запросов содержит свойства пользователя, запрос завершается ошибкой.
  • Если сервер получает PUBACK от клиента с кодом ответа, отличного от успешного выполнения, подключение завершается.
  • Значение "Сохранить в живых" составляет 1160 секунд.

Текущие ограничения MQTTv3.1.1

MQTT версии 5 в настоящее время отличается от спецификации MQTT версии 3.1.1 следующим образом:

  • Флаг QoS2 и сохранение пока не поддерживаются. Запрос публикации с флагом сохранения или с помощью QoS2 завершается сбоем и закрывает подключение.
  • Порядок сообщений не гарантируется.
  • Значение "Сохранить в живых" составляет 1160 секунд.

Примеры кода:

Этот репозиторий содержит примеры кода C#, C и Python, показывающие, как отправлять данные телеметрии, отправлять команды и широковещательные оповещения. Сертификаты, созданные с помощью примеров, подходят для тестирования, но они не подходят для рабочих сред.

Дальнейшие действия

Дополнительные сведения о MQTT:

Дополнительные сведения о брокере MQTT: