Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Транспорт телеметрии сообщений (MQTT) — это транспортный протокол обмена сообщениями с подпиской на публикацию, предназначенный для ограниченных сред. MQTT является эффективным, масштабируемым и надежным, что делает его популярным для обмена данными в сценариях Интернета вещей (IoT). Брокер MQTT поддерживает клиенты, которые публикуют и подписываются на сообщения через MQTT версии 3.1.1, MQTT версии 3.1.1 через WebSocket, MQTT v5 и MQTT v5 по WebSocket. Брокер MQTT также поддерживает обмен данными между версиями MQTT (MQTT 3.1.1 и MQTT 5).
Брокер MQTT в Сетке событий Azure также поддерживает отправку сообщений MQTT по протоколу HTTPS, упрощая интеграцию с клиентами, отличными от MQTT. Сетка событий позволяет отправлять сообщения MQTT в облако для анализа данных, хранения и визуализаций, среди прочего. Эта функция сейчас доступна в предварительной версии.
MQTT версии 5 появилось множество улучшений по сравнению с MQTT версии 3.1.1 для обеспечения более простой, прозрачной и эффективной связи. Добавлено:
- Улучшение отчетов об ошибках.
- Более прозрачное взаимодействие с клиентами с помощью таких функций, как свойства пользователя и тип контента.
- Больше контроля над клиентами через функции, такие как срок действия сообщения и сеанса.
- Стандартные важные шаблоны, такие как шаблон ответа запроса.
Поток подключений
Клиенты MQTT должны подключаться через TLS 1.2 или TLS 1.3. Пытается пропустить этот шаг сбоем при подключении.
При подключении к брокеру MQTT используйте следующие порты во время обмена данными через MQTT:
- MQTT версии 3.1.1 и MQTT версии 5 на TCP-порту 8883
- MQTT версии 3.1.1 через WebSocket и MQTT v5 через WebSocket на TCP-порте 443
Пакет CONNECT должен содержать следующие свойства:
- Поле
ClientIdявляется обязательным, и оно должно содержать имя сеанса клиента. Имя сеанса должно быть уникальным в пространстве имен. Имя проверки подлинности клиента можно использовать в качестве имени сеанса, если каждый клиент использует один сеанс для каждого клиента. Если один клиент использует несколько сеансов, он должен использовать разные значения дляClientIdкаждого сеанса. - Поле
Usernameнеобходимо, если вы не выбрали значение воalternativeAuthenticationNameSourcesвремя создания пространства имен. В этом случае необходимо указать имя проверки подлинности клиента вUsernameполе. Это имя должно соответствовать указанному имени проверки подлинности и значению в поле сертификата клиента, указанном во время создания клиентского ресурса.
Дополнительные сведения о проверке подлинности клиента.
Поддержка нескольких сеансов
Поддержка нескольких сеансов позволяет клиентам MQTT приложения иметь более масштабируемую и надежную реализацию, подключаясь к брокеру MQTT с несколькими активными сеансами одновременно.
Конфигурация пространства имен
Прежде чем использовать эту функцию, необходимо настроить пространство имен, чтобы разрешить несколько сеансов на клиента. Чтобы настроить несколько сеансов на клиент на портале Azure, выполните следующие действия.
- Перейдите в пространство имен в портал Azure.
- В разделе "Конфигурация" измените значение максимального числа клиентских сеансов на имя проверки подлинности на количество сеансов на клиент, который требуется.
- Выберите Применить.
Примечание.
Для конфигурации Azure CLI обновите MaxClientSessionsPerAuthenticationName свойство в полезных данных пространства имен с нужным значением.
Поток подключений
Пакеты CONNECT для каждого сеанса должны содержать следующие свойства:
-
UsernameУкажите свойство в пакете CONNECT для обозначения имени проверки подлинности клиента. -
ClientIDУкажите свойство в пакете CONNECT для обозначения имени сеанса, например если для каждого имени пользователя задано одно или несколько значений идентификатора клиента.
Например, следующие сочетания Username и ClientId в пакете CONNECT позволяют клиенту Mgmt-application подключаться к брокеру MQTT через три независимых сеанса:
-
Первый сеанс:
-
Username:Mgmt-application -
ClientId:Mgmt-Session1
-
-
Второй сеанс:
-
Username:Mgmt-application -
ClientId:Mgmt-Session2
-
-
Третий сеанс:
-
Username:Mgmt-application -
ClientId:Mgmt-Session3
-
Дополнительные сведения см. в разделе "Установка нескольких сеансов для одного клиента".
Обработка сеансов
- Если клиент пытается взять на себя активный сеанс другого клиента, указав его имя сеанса с другим именем проверки подлинности, запрос на подключение отклоняется с несанкционированной ошибкой. Например, если клиент B пытается подключиться к сеансу 123 , назначенному в то время для клиента A, запрос на подключение клиента B отклоняется. Однако если тот же клиент пытается повторно подключиться с теми же именами сеансов и тем же именем проверки подлинности, он может взять на себя существующий сеанс.
- Если ресурс клиента удаляется без завершения сеанса, другие клиенты не могут использовать его имя сеанса до истечения срока действия сеанса. Например, если клиент B создает сеанс с именем сеанса 123 , а затем клиент B удаляется, клиент A не может подключиться к сеансу 123 до истечения срока действия.
- Ограничение количества сеансов для каждого клиента применяется к сетевым и автономным сеансам в любой момент времени. Например, рассмотрим пространство имен с максимальным числом клиентских сеансов для каждого имени проверки подлинности, равным 1. Клиент A подключается к постоянному сеансу 123 , а затем отключается. Клиент A не может подключиться к новому сеансу 456 , так как его сеанс 123 по-прежнему активен, даже если он находится в автономном режиме. Соответственно, рекомендуется, чтобы один и тот же клиент всегда повторно подключается с теми же статическими именами сеансов, а не создавать новое имя сеанса при каждом повторном подключении.
Функции MQTT
Брокер MQTT сетки событий поддерживает следующие функции MQTT.
Качество обслуживания
Брокер MQTT поддерживает уровни качества обслуживания (QoS) 0 и 1, которые определяют гарантию доставки сообщений на пакеты PUBLISH и SUBSCRIBE между клиентами и брокером MQTT.
- QoS 0 гарантирует доставку по крайней мере один раз: подписчик не подтверждает сообщения с QoS 0, и издатель не повторно отправляет их.
- QoS 1 гарантирует по крайней мере один раз доставку: подписчик признает сообщения, и издатель повторно отправляет их, если они не были подтверждены.
QoS позволяет клиентам контролировать эффективность и надежность взаимодействия.
Постоянные сеансы
Брокер MQTT поддерживает постоянные сеансы для MQTT версии 3.1.1, чтобы брокер MQTT сохранял сведения о сеансе клиента при отключении, чтобы обеспечить надежность взаимодействия. Эти сведения включают подписки клиента и пропущенные или незамеченные сообщения QoS 1. Клиенты могут настроить постоянный сеанс, задав cleanSession флаг в пакете falseCONNECT.
Очистка срока действия запуска и сеанса
MQTT версии 5 представила функции чистого запуска и истечения срока действия сеанса в качестве улучшения по сравнению с MQTT версии 3.1.1 при обработке сохраняемости сеансов. Чистый запуск позволяет клиенту запускать новый сеанс с брокером MQTT после удаления всех предыдущих данных сеанса. Срок действия сеанса позволяет клиенту сообщать брокеру MQTT, когда неактивный сеанс считается истекшим и автоматически удален.
В пакете CONNECT клиент может задать Clean Start флаг true. Клиент также может задать короткий интервал истечения срока действия сеанса по соображениям безопасности или избежать потенциальных конфликтов данных, которые могли возникнуть во время предыдущего сеанса. Клиент также может задать Clean Start флаг false или длительный интервал истечения срока действия сеанса, чтобы обеспечить надежность и эффективность постоянных сеансов.
Максимальная конфигурация интервала истечения срока действия сеанса
Можно настроить максимальный интервал истечения срока действия сеанса для всех клиентов, которые подключаются к пространству имен сетки событий. Для клиентов MQTT версии 3.1.1 настроенное ограничение применяется в качестве интервала истечения срока действия сеанса по умолчанию для всех постоянных сеансов. Для клиентов MQTT версии 5 настроенное ограничение применяется в качестве максимального значения для свойства интервала истечения срока действия сеанса в пакете CONNECT. Любое значение, превышающее ограничение, корректируется. Значение по умолчанию для этого свойства пространства имен составляет один час, и оно может продлиться до восьми часов. Чтобы настроить максимальный интервал истечения срока действия сеанса на портале Azure, выполните следующие действия.
- Перейдите в пространство имен в портал Azure.
- В разделе "Конфигурация" измените значение максимального интервала истечения срока действия сеанса в часах до нужного предела.
- Выберите Применить.
Переполнение сеанса
Брокер MQTT сохраняет очередь сообщений для каждого активного сеанса MQTT, который не подключен, пока клиент снова не подключается к брокеру MQTT, чтобы получить сообщения в очереди. Если клиент не подключается к получению сообщений QoS 1 очереди, очередь сеанса накапливает сообщения до тех пор, пока не достигнет его предела в 100 сообщений или 1 МБ. После того как очередь достигнет предела в течение срока существования сеанса, сеанс завершается.
Последние сообщения о завещании и завещании
Last Will and Testament (LWT) уведомляет клиентов MQTT с резким отключением других клиентов MQTT. Вы можете использовать LWT для обеспечения предсказуемого и надежного потока обмена данными между клиентами MQTT во время непредвиденных отключений. Эта возможность ценна для сценариев, когда взаимодействие в режиме реального времени, надежность системы и согласованные действия являются критически важными. Клиенты, которые совместно работают над выполнением сложных задач, могут реагировать на сообщения LWT друг от друга, изменяя их поведение, распространяя задачи или принимая на себя определенные обязанности по поддержанию производительности и стабильности системы.
Чтобы использовать LWT, клиент может указать сообщение "Уилл", раздел "Будет" и остальные свойства Will в пакете CONNECT во время подключения. Когда клиент резко отключается, брокер MQTT публикует сообщение "Будет" всем клиентам, которые подписаны на раздел Will. Чтобы уменьшить шум от изменяющихся отключений, клиент может задать интервал задержки значением больше нуля. В этом случае, если клиент отключается внезапно, но восстанавливает подключение до истечения срока действия интервала задержки, сообщение "Будет" не публикуется.
Свойства пользователя
Брокер MQTT поддерживает свойства пользователей в пакетах MQTT версии 5 PUBLISH, которые можно использовать для добавления пользовательских пар "ключ-значение" в заголовок сообщения, чтобы обеспечить больше контекста в сообщении. Варианты использования свойств пользователей являются универсальными. Эту функцию можно использовать для включения назначения или источника сообщения, чтобы получатель смог обработать сообщение без анализа полезных данных, что экономит вычислительные ресурсы. Например, сообщение со свойством пользователя, указывающее его назначение как предупреждение, может активировать логику обработки, отличную от одной с целью "информации".
Метод "запроса и ответа"
MQTT версии 5 представил поля в заголовке пакета MQTT PUBLISH, который предоставляет контекст для сообщения ответа в шаблоне ответа. Эти поля включают раздел ответа и идентификатор корреляции, который ответитель может использовать в ответе без предварительной настройки. Сведения об ответе обеспечивают более эффективное взаимодействие со стандартным шаблоном ответа на запросы, который используется в сценариях управления и команд.
Интервал истечения срока действия сообщения
В MQTT версии 5 интервал истечения срока действия сообщения позволяет сообщениям иметь настраиваемое время существования. Интервал истечения срока действия сообщения определяется в качестве интервала времени между временем публикации сообщения брокером MQTT и временем, когда брокеру необходимо отменить незавершенное сообщение. Эта функция полезна в сценариях, когда сообщения допустимы только для определенного периода времени, например команд с учетом времени, потоковой передачи данных в режиме реального времени или оповещений системы безопасности. Задав интервал истечения срока действия сообщения, брокер MQTT может автоматически удалять устаревшие сообщения. Этот шаг гарантирует, что для подписчиков доступна только соответствующая информация. Если интервал истечения срока действия сообщения равен нулю, это означает, что сообщение никогда не должно истекать.
Псевдонимы тем
В MQTT версии 5 псевдонимы раздела позволяют клиенту использовать более короткий псевдоним вместо полного имени раздела в опубликованном сообщении. Брокер MQTT поддерживает сопоставление псевдонима раздела и фактического имени раздела. Эта функция может сохранить пропускную способность сети и уменьшить размер заголовка сообщения, особенно для разделов с длинными именами. Это полезно в сценариях, когда один и тот же раздел неоднократно публикуется в нескольких сообщениях, таких как в сетях датчиков. Брокер MQTT поддерживает до 10 псевдонимов раздела. Клиент может использовать Topic Alias поле в пакете PUBLISH, чтобы заменить полное имя раздела соответствующим псевдонимом.
Управление потоком
В MQTT версии 5 управление потоками ссылается на механизм управления скоростью и размером сообщений, которые может обрабатывать клиент. Чтобы настроить управление потоком, задайте Maximum Packet Size параметры в Receive Maximum пакете CONNECT. Параметр Receive Maximum позволяет клиенту ограничить количество сообщений, отправляемых брокером, до количества сообщений, которые клиент может обрабатывать. Параметр Maximum Packet Size определяет максимальный размер пакетов, которые клиент может получать. Брокер MQTT имеет ограничение размера сообщения 512 КиБ. Эта функция обеспечивает надежность и стабильность взаимодействия для ограниченных устройств с ограниченными возможностями обработки или хранилища.
Отрицательные подтверждения и пакет отключения, инициированные сервером
Для MQTT версии 5 брокер MQTT может отправлять отрицательные подтверждения и пакеты отключения, инициированные сервером, которые предоставляют клиенту дополнительные сведения о сбоях доставки сообщений или подключения. Эти функции помогают клиенту диагностировать причину сбоя и принимать соответствующие действия по устранению неполадок. Брокер MQTT использует коды причин, определенные в спецификации MQTT версии 5.
Порядок сообщений
MQTT версии 5 обеспечивает доставку сообщений в порядке в каждом разделе и каждый клиент при использовании уровня QoS 1, что имеет решающее значение для рабочих процессов, требующих целостности последовательности. Это идеально подходит для таких сценариев, как телеметрийные данные, выполнение команд и временные ряды.
Однако это не гарантирует порядок в разных разделах или при отправке сообщений с различными уровнями качества обслуживания. Чтобы узнать больше, обратитесь к нам по адресу [email protected].
Назначенные идентификаторы клиента
MQTT версии 5 предоставляет поддержку назначенных идентификаторов клиента, что позволяет брокеру MQTT создавать и возвращать уникальный идентификатор клиента, если клиент не предоставляет его. Поддержка брокера MQTT для этой функции гарантирует простое подключение клиентов и снижает потребность клиентов в управлении собственными идентификаторами. Это особенно полезно в сценариях, когда предоставление услуг клиентам является динамическим или когда устройства не имеют заранее настроенной идентификации. Идентификаторы назначенных клиентов можно получить из ответа CONNACK и повторно использовать для будущих сеансов для обеспечения согласованной идентификации.
Управление ограничениями идентификатора клиента и сеанса в MQTT
- Назначенные идентификаторы клиентов позволяют клиентам подключаться без указания предопределенных идентификаторов, что позволяет использовать временные или постоянные сеансы.
- Клиенты могут избежать блокировки с помощью коротких интервалов истечения срока действия сеанса во время первого подключения и сохранения назначенного идентификатора клиента для дальнейшего использования.
- Для обновлений или сбросов прошивки клиенты должны хранить известный идентификатор клиента или использовать небольшие интервалы истечения сессии, чтобы избежать продолжительных блокировок.
- Настройка пространства имен может увеличить лимит сеансов на клиента, чтобы минимизировать перебои во время обновлений или откатов.
Текущие ограничения
Брокер MQTT добавляет дополнительные возможности MQTT версии 5 и MQTT версии 3.1.1 в будущем для согласования с спецификациями MQTT. В следующем списке описаны текущие различия между функциями, поддерживаемыми брокером MQTT и спецификациями MQTT.
Текущие ограничения MQTT версии 5
MQTT v5 в настоящее время отличается от спецификации MQTT v5 следующим образом:
- Общие подписки пока не поддерживаются.
- Максимальный интервал задержки Will — 300.
- Максимальное значение QoS равно 1.
- Максимальный размер пакета — 512 КиБ.
- Идентификаторы подписки не поддерживаются.
- Максимальный псевдоним раздела — 10. Сервер не назначает псевдонимы разделов для исходящих сообщений в настоящее время. Клиенты могут назначать и использовать псевдонимы разделов в пределах заданного предела.
- CONNACK не возвращает
Response Informationсвойство, даже если запрос CONNECT содержитRequest Response Informationсвойство. - Свойства пользователей в CONNECT, SUBSCRIBE, DISCONNECT, PUBACK и AUTH не используются службой, поэтому они не поддерживаются. Если любой из этих запросов содержит свойства пользователя, запрос завершается ошибкой.
- Если сервер получает пакет PUBACK от клиента с кодом ответа, отличного отsuccess, подключение завершается.
- Максимальное значение 1160 секунд.
Текущие ограничения MQTTv3.1.1
MQTT v5 в настоящее время отличается от спецификации MQTT версии 3.1.1 следующим образом:
- QoS 2 не поддерживается. Запрос публикации с флагом
RETAINили с QoS 2 завершается сбоем и закрывает подключение. - Максимальное значение 1160 секунд.
Примеры кода
Этот репозиторий содержит примеры кода C#, C и Python, показывающие, как отправлять данные телеметрии, отправлять команды и широковещательные оповещения. Сертификаты, созданные с помощью примеров, подходят для тестирования, но они не подходят для рабочих сред.
Связанный контент
Дополнительные сведения о MQTT см. в спецификации MQTT версии 5. Дополнительные сведения о брокере MQTT см. в следующих статье: