Взаимодействие с DPS через протокол MQTT

Служба DPS позволяет устройствам взаимодействовать с конечной точкой устройства DPS с помощью следующих средств:

DPS не является полнофункциональным брокером MQTT и не поддерживает все расширения функциональности, указанные в стандарте MQTT 3.1.1. В этой статье описывается, как устройства могут использовать поддерживаемые расширения функциональности MQTT для связи с DPS.

Весь обмен данными между устройствами и DPS защищен с помощью протокола TLS/SSL. Таким образом, DPS не поддерживает небезопасные подключения через порт 1883.

Примечание

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

Подключение к DPS

Устройство может использовать протокол MQTT для подключения к DPS с помощью любого из следующих способов.

Непосредственное использование протокола MQTT (как устройство)

Если устройство не может использовать пакеты SDK для устройств, оно может подключаться к общедоступным конечным точкам устройства по протоколу MQTT по порту 8883. В пакете CONNECT устройство должно использовать следующие значения.

  • В поле ClientId укажите значение registrationId.

  • В поле Username укажите значение {idScope}/registrations/{registration_id}/api-version=2019-03-31, где {idScope} — это idScope для DPS.

  • В поле Пароль укажите маркер SAS. Формат маркера SAS аналогичен описанному для протоколов HTTPS и AMQP:

    SharedAccessSignature sr={URL-encoded-resourceURI}&sig={signature-string}&se={expiry}&skn=registration Значение resourceURI должно быть в формате {idScope}/registrations/{registration_id}. Наименование политики должно быть registration.

    Примечание

    При использовании аутентификации с помощью сертификата X.509 пароли маркеров SAS не требуются.

    Дополнительные сведения о способах создания маркеров SAS см. в разделе "Маркеры проверки подлинности" статьи Управление доступом к DPS.

Ниже приведен список реакций на события, характерных для реализации DPS:

  • DPS не поддерживает функцию флага CleanSession, заданную как 0.

  • Если приложение для устройства подписывается на раздел с качеством обслуживания 2, то DPS присваивает пакету SUBACK качество обслуживания не выше 1. После этого DPS отправляет сообщения на устройство, используя качество обслуживания 1.

конфигурация протокола TLS/SSL

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

Регистрация устройства

Чтобы зарегистрировать устройство через DPS, устройство должно подписаться, используя $dps/registrations/res/# в качестве фильтра разделов. Многоуровневый подстановочный знак # в параметре Topic Filter (Фильтр разделов) используется только для того, чтобы разрешить устройству получать дополнительные свойства в имени раздела. В DPS запрещено использовать подстановочные знаки # или ? для фильтрации подразделов. Так как DPS не является универсальным брокером службы сообщений на основе шаблона "издатель-подписчик", то он поддерживает только задокументированные имена и фильтры разделов.

Устройство должно публиковать сообщение register в службу DPS, используя $dps/registrations/PUT/iotdps-register/?$rid={request_id} в качестве имени раздела. Полезные данные должны содержать объект регистрация устройства в формате JSON. В случае успеха устройство получит ответ на имя раздела $dps/registrations/res/202/?$rid={request_id}&retry-after=x, где x — это значение retry-after в секундах. Полезные данные отклика будут содержать объект RegistrationOperationStatus в формате JSON.

Опрос состояния операции регистрации

Устройство должно периодически опрашивать службу, чтобы получить результат операции регистрации устройства. Предполагая, что устройство уже подписано на раздел $dps/registrations/res/#, как указано выше, оно может опубликовать сообщение get operationstatus в имени раздела $dps/registrations/GET/iotdps-get-operationstatus/?$rid={request_id}&operationId={operationId}. Идентификатор операции в этом сообщении должен быть значением, полученным в ответном сообщении RegistrationOperationStatus в предыдущем шаге. В случае успеха служба будет отвечать на раздел $dps/registrations/res/200/?$rid={request_id}. Полезные данные отклика будут содержать объект RegistrationOperationStatus. Устройство должно продолжать опрос службы, если код отклика равен 202 после задержки, равной периоду retry-after. Операция регистрации устройства считается успешной, если служба возвращает код состояния 200.

Подключение через WebSocket

При подключении через WebSocket укажите подпротокол как mqtt. Следуйте RFC 6455.

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

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

Для дальнейшего изучения возможностей DPS см. следующие статьи: