Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Протокол транспортировки телеметрийных сообщений (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 версии 5 через 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 в пакете CONNECT false.
Чистый запуск и завершение сеанса
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, клиент может указать сообщение завещания, тему завещания и остальные свойства завещания в пакете 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, что имеет решающее значение для рабочих процессов, требующих целостность последовательности. Это идеально подходит для таких сценариев, как телеметрийные данные, выполнение команд и временные ряды.
Однако это не гарантирует порядок в разных разделах или при отправке сообщений с различными уровнями качества обслуживания. Чтобы узнать больше, обратитесь к нам по адресу askmqtt@microsoft.com.
Назначенные идентификаторы клиента
MQTT версии 5 предоставляет поддержку назначенных идентификаторов клиента, что позволяет брокеру MQTT создавать и возвращать уникальный идентификатор клиента, если клиент не предоставляет его. Поддержка брокера MQTT для этой функции гарантирует простое подключение клиентов и снижает потребность клиентов в управлении собственными идентификаторами. Это особенно полезно в сценариях, когда предоставление услуг клиентам является динамическим или когда устройства не имеют заранее настроенной идентификации. Идентификаторы назначенных клиентов можно получить из ответа CONNACK и повторно использовать для будущих сеансов для обеспечения согласованной идентификации.
Управление ограничениями идентификатора клиента и сеанса в MQTT
- Назначенные идентификаторы клиентов позволяют клиентам подключаться без указания предопределенных идентификаторов, что позволяет использовать временные или постоянные сеансы.
- Клиенты могут избежать блокировки с помощью коротких интервалов истечения срока действия сеанса во время первого подключения и сохранения назначенного идентификатора клиента для дальнейшего использования.
- Для обновлений или сбросов прошивки клиенты должны хранить известный идентификатор клиента или использовать небольшие интервалы истечения сессии, чтобы избежать продолжительных блокировок.
- Настройка пространства имен может увеличить лимит сеансов на клиента, чтобы минимизировать перебои во время обновлений или откатов.
Общие подписки
Общие подписки в MQTT позволяют нескольким клиентам получать сообщения из одной подписки на тему, работая как часть группы, что позволяет брокеру распределять сообщения между ними с использованием балансировки нагрузки. Вместо каждого подписчика, получающего каждое сообщение, рабочая нагрузка является общей— каждое сообщение доставляется только одному клиенту в группе. Этот шаблон особенно полезен для масштабирования серверной обработки, повышения пропускной способности и обеспечения высокой доступности в таких сценариях, как обработка телеметрии, обработка заказов или микрослужб на основе событий. В Сетка событий Azure MQTT Broker общие подписки помогают создавать устойчивые, горизонтально масштабируемые потребительские приложения без необходимости сложной пользовательской логики балансировки нагрузки.
Идентификаторы подписок
В Сетка событий Azure MQTT Broker (MQTT 5) идентификаторы подписок позволяют клиенту назначать уникальный числовой идентификатор каждой подписке, чтобы входящие сообщения легко связывались с правильной подпиской. Когда брокер доставляет сообщение, он включает идентификаторы соответствующих подписок, что позволяет клиенту эффективно маршрутизировать и обрабатывать сообщения, особенно при обработке нескольких или перекрывающихся фильтров разделов.
Почему идентификаторы подписки имеют значение
- Очистить контекст сообщения: мгновенно узнать, какая подписка активировала сообщение
- Упрощенная логика: избегайте сопоставления сложных разделов на стороне клиента
- Эффективная обработка: быстро перенаправляйте сообщения в правильный обработчик или рабочий процесс
Пример мониторинга смарт-дома
Рассмотрите возможность мониторинга двух клиентских приложений различных типов данных из дома:
- Идентификатор подписки 1 →
home/livingroom/temperature - Идентификатор подписки 2 →
home/+/humidity
Брокер доставляет сообщение, опубликованное в home/livingroom/temperature, с идентификатором подписки: 1. Сообщение, опубликованное в home/kitchen/humidity, доставляется с идентификатором подписки: 2.
Вместо проверки строк раздела, таких как home/livingroom/temperature, клиент может просто использовать:
- Идентификатор 1 → Данные о температуре процесса
- Идентификатор 2 → Данные о влажности процесса
Это делает логику приложения более чистой, быстрой и удобной для обслуживания.
Текущие ограничения
Брокер MQTT добавляет дополнительные возможности MQTT версии 5 и MQTT версии 3.1.1 в будущем для согласования с спецификациями MQTT. В следующем списке описаны текущие различия между функциями, поддерживаемыми брокером MQTT и спецификациями MQTT.
Текущие ограничения MQTT версии 5
Поддержка MQTT версии 5 в настоящее время отличается от спецификации MQTT версии 5 следующим образом:
- Эффективный интервал задержки будет наименьшим из заданного интервала задержки и интервала истечения срока действия сеанса (если он задан).
- Максимальное значение QoS равно 1.
- Максимальный размер пакета — 512 КиБ.
- Максимальный псевдоним темы — 10. Сервер не назначает псевдонимы разделов для исходящих сообщений в настоящее время. Клиенты могут назначать и использовать псевдонимы разделов в пределах заданного предела.
- CONNACK не возвращает
Response Informationсвойство, даже если запрос CONNECT содержитRequest Response Informationсвойство. - Свойства пользователя в пакетах CONNECT, SUBSCRIBE, DISCONNECT, PUBACK и AUTH не используются службой, поэтому они не поддерживаются. Если любой из этих запросов содержит свойства пользователя, запрос завершается ошибкой.
- Если сервер получает пакет PUBACK от клиента с кодом ответа, который не является успехом, подключение завершается.
- Максимальное значение параметра Keep Alive составляет 1160 секунд.
Текущие ограничения MQTT версии 3.1.1
Брокер MQTT в настоящее время отличается от спецификации MQTT версии 3.1.1 следующим образом:
- QoS 2 не поддерживается. Запрос публикации с флагом
RETAINили с QoS 2 завершается сбоем и закрывает подключение. - Максимальное значение параметра Keep Alive составляет 1160 секунд.
Примеры кода
Этот репозиторий содержит примеры кода C#, C и Python, показывающие, как отправлять данные телеметрии, отправлять команды и широковещательные оповещения. Сертификаты, созданные с помощью примеров, подходят для тестирования, но они не подходят для рабочих сред.
Связанный контент
Дополнительные сведения о MQTT см. в спецификации MQTT версии 5. Дополнительные сведения о брокере MQTT см. в следующих статье: