Поделиться через


Создание и чтение сообщений Центра Интернета вещей

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

Примечание.

Некоторые функции, упоминаемые в этой статье, например обмен сообщениями между облаком и устройством, двойники устройств и управление устройствами, доступны только для Центра Интернета вещей уровня "Стандартный". Дополнительные сведения о базовых и стандартных и бесплатных уровнях Центра Интернета вещей см. в разделе Выберите нужный уровень и размер Центра Интернета вещей для вашего решения.

Для реализация отправки сообщений с устройства в облако Центр Интернета вещей использует модель потоковой передачи сообщений. сообщения IoT Hub от устройств к облаку больше похожи на события Event Hubs, чем на сообщения Service Bus, поскольку через службу проходит большой объем событий, которые могут прочитать несколько читателей.

Сообщение Центра Интернета вещей состоит из следующих компонентов.

  • Предопределенный набор системных свойств , как описано далее в этой статье.

  • Набор свойств приложения. Словарь свойств строки, которые приложение может задать и использовать без необходимости десериализации текста сообщения. Центр Интернета вещей никогда не изменяет эти свойства.

  • Текст сообщения, который может быть любым типом данных.

Каждый протокол устройства реализует свойства параметров различными способами. Дополнительные сведения см. в руководстве разработчика по протоколу MQTT и руководстве по протоколу AMQP.

При отправке сообщений с устройства в облако с помощью протокола HTTPS или отправки сообщений из облака в устройство имена свойств и значения могут содержать только буквенно-цифровые символы ASCII, а также ! # $ % & ' * + - . ^ _ ` | ~ .

Отправка сообщений с устройства в облако с помощью Центра Интернета вещей имеет следующие характеристики:

  • Сообщения, отправляемые с устройства в облако, устойчивы и хранятся в конечной точке по умолчанию messages/events Центра Интернета вещей до семи дней.

  • Размер сообщений, поступающих с устройства в облако, не может превышать 256 КБ, и их можно объединять в пакеты, чтобы оптимизировать отправку. Размер пакетов не может превышать 256 КБ.

  • Центр Интернета вещей не допускает произвольное секционирование. Сообщения, отправляемые с устройства в облако, секционируются по исходному идентификатору deviceId.

  • Как поясняется в статье Управление доступом к Центру Интернета вещей, Центр Интернета вещей обеспечивает аутентификацию и контроль доступа для каждого устройства.

  • Можно пометить сообщения данными, которые будут передаваться в свойства приложения. Дополнительные сведения см. в статье Обогащение сообщений.

Примечание.

Каждый протокол Центра Интернета вещей предоставляет свойство типа контента сообщения, которое учитывается при маршрутизации данных в пользовательские конечные точки. Чтобы данные правильно обрабатывались в месте назначения (например, JSON, обрабатываемый как строка синтаксического анализа вместо двоичных данных в кодировке Base64), укажите соответствующий тип контента и набор символов для сообщения.

Чтобы использовать текст сообщения в запросе маршрутизации в Центре Интернета вещей, укажите допустимый объект JSON для сообщения и задайте для свойства типа контента сообщения значение application/json;charset=utf-8.

В следующем примере показан допустимый, маршрутизируемый текст сообщения:

{
    "timestamp": "2022-02-08T20:10:46Z",
    "tag_name": "spindle_speed",
    "tag_value": 100
}

Системные свойства сообщений из устройства в облако

Свойство Описание Задается пользователем? Ключевое слово для
запроса маршрутизации
message-id Задаваемый пользователем идентификатор сообщения, используемый для шаблонов типа "запрос-ответ". Формат: строка с учетом регистра (до 128 символов) буквенно-цифровых 7-битных символов ASCII плюс - : . + % _ # * ? ! ( ) , = @ ; $ '. Да идентификатор сообщения
iothub-enqueuedtime Дата и время получения сообщения, отправленного с устройства в облако, Центром Интернета вещей. Нет enqueuedTime
идентификатор пользователя Идентификатор, используемый для указания источника сообщений. Да userId
Идентификатор устройства iothub-connection-device-id Центр Интернета вещей устанавливает этот идентификатор в сообщениях, отправляемых с устройства в облако. Содержит идентификатор deviceId устройства, отправившего сообщение. Нет идентификаторУстройстваПодключения
iothub-connection-module-id Центр Интернета вещей устанавливает этот идентификатор в сообщениях, отправляемых с устройства в облако. Содержит идентификатор moduleId устройства, с которого было отправлено сообщение. Нет идентификатор модуля подключения
iothub-connection-auth-generation-id Центр Интернета вещей устанавливает этот идентификатор в сообщениях, отправляемых с устройства в облако. Содержит connectionDeviceGenerationId (согласно Свойства удостоверений устройств) устройства, с которого было отправлено сообщение. Нет ИдентификаторПоколенияУстройстваПодключения
iothub-connection-auth-method (метод аутентификации соединения iothub) Центр Интернета вещей устанавливает этот метод проверки подлинности в сообщениях, отправляемых с устройства в облако. Это свойство содержит сведения о методе проверки подлинности, используемом для аутентификации устройства, отправляющего сообщение. Нет метод аутентификации подключения
iothub-app-iothub-creation-time-utc Разрешает устройству отправлять время создания события при отправке данных в пакет. Да время-создания-UTC
iothub-время-создания-UTC Разрешает устройству отправлять время создания события при отправке одного сообщения за раз. Да время-создания-UTC
dt-dataschema Центр Интернета вещей устанавливает это значение в сообщениях, отправляемых с устройства в облако. Оно содержит идентификатор модели устройства, указанный в подключении устройства. Нет $dt-dataschema
dt-subject Имя компонента, который отправляет сообщения с устройства в облако. Да $dt-subject

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

Обычно свойства приложения применяются для отправки метки времени с устройства с помощью свойства iothub-creation-time-utc для регистрации времени отправки сообщения устройством. Такая метка времени должна быть в формате UTC без сведений о часовом поясе. Например, значение 2021-04-21T11:30:16Z является допустимым, а 2021-04-21T11:30:16-07:00 — нет.

{
  "applicationId":"00001111-aaaa-2222-bbbb-3333cccc4444",
  "messageSource":"telemetry",
  "deviceId":"sample-device-01",
  "schema":"default@v1",
  "templateId":"urn:modelDefinition:mkuyqxzgea:e14m1ukpn",
  "enqueuedTime":"2021-01-29T16:45:39.143Z",
  "telemetry":{
    "temperature":8.341033560421833
  },
  "messageProperties":{
    "iothub-creation-time-utc":"2021-01-29T16:45:39.021Z"
  },
  "enrichments":{}
}

Системные свойства сообщений из облака на устройство

Недвижимость Описание Устанавливается пользователем?
идентификатор сообщения Задаваемый пользователем идентификатор сообщения, используемый для шаблонов типа "запрос-ответ". Формат: строка с учетом регистра (длиной до 128 символов) 7-битных буквенно-цифровых символов ASCII плюс - : . + % _ # * ? ! ( ) , = @ ; $ '. Да
номер последовательности Число (уникальное для каждой очереди устройства), которое Центр Интернета вещей назначает каждому сообщению, отправленному из облака на устройство. Нет
до Место назначения, которое указывается в сообщениях, отправляемых из облака на устройство. Нет
абсолютное время истечения срока Дата и время истечения срока действия сообщения. Да
идентификатор корреляции Строковое свойство в ответном сообщении, которое обычно содержит MessageId запроса в моделях "запрос-ответ". Да
идентификатор пользователя Идентификатор, используемый для указания источника сообщений. Когда сообщения создаются в Центре Интернета вещей, идентификатор пользователя — это имя центра Интернета вещей. Да
iothub-ack Генератор отзывов на сообщения. Это свойство используется в сообщениях, отправляемых из облака в устройство, чтобы запросить у Центра Интернета вещей отправку отзыва после того, как сообщение будет использовано устройством. Возможные значения: none (по умолчанию) — не создается сообщение обратной связи, positive — сообщение обратной связи будет получено, если исходное сообщение было завершено, negative — сообщение обратной связи будет получено, если срок действия сообщения истек (или было достигнуто максимальное количество доставок) и оно не было завершено устройством, или full — и положительное, и отрицательное сообщения обратной связи. Да

Имена системных свойств

Имена системных свойств различаются в зависимости от конечной точки, на которую отправляются сообщения.

Имя системного свойства Event Hubs Хранилище Azure Cлужебная шина Сетка событий
Идентификатор сообщения идентификатор сообщения идентификатор сообщения ИдентификаторСообщения идентификатор сообщения
Идентификатор пользователя идентификатор пользователя userId UserId идентификатор пользователя
Идентификатор устройства подключения iothub-connection-device-id идентификаторУстройстваПодключения iothub-connection-device-id iothub-connection-device-id
Идентификатор модуля подключения iothub-connection-module-id идентификатор модуля подключения iothub-connection-module-id iothub-connection-module-id
Идентификатор генерации аутентификации подключения iothub-connection-auth-generation-id ИдентификаторПоколенияУстройстваПодключения идентификатор генерации аутентификации соединения iothub iothub-connection-auth-generation-id
Метод проверки подлинности подключения iothub-connection-auth-method (метод аутентификации соединения iothub) метод аутентификации подключения iothub-connection-auth-method (метод аутентификации соединения iothub) iothub-connection-auth-method (метод аутентификации соединения iothub)
тип содержимого тип_содержимого тип содержимого ТипКонтента iothub-content-type
кодировка содержимого кодировка содержимого (content-encoding) кодировка содержимого Кодировка содержимого iothub-content-encoding
iothub-enqueuedtime iothub-enqueuedtime enqueuedTime Н/П iothub-enqueuedtime
CorrelationId идентификатор корреляции correlationId CorrelationId идентификатор корреляции
dt-dataschema dt-dataschema dt-dataschema dt-dataschema dt-dataschema
dt-subject dt-subject dt-subject dt-subject dt-subject

Размер сообщения

Центр Интернета вещей измеряет размер сообщения вне зависимости от протокола, учитывая только фактический объем полезных данных. Размер в байтах вычисляется как сумма следующих значений:

  • размер тела в байтах
  • размер в байтах всех значений свойств системы сообщений;
  • размер в байтах всех имен и значений свойств пользователей.

Имена и значения свойств ограничены символами ASCII, то есть длина строк равна размеру в байтах.

Свойства защиты от спуфинга

Чтобы избежать спуфинга устройств при работе с сообщениями, отправляемыми с устройства в облако, Центр Интернета вещей отмечает все сообщения такими свойствами:

  • iothub-connection-device-id
  • iothub-connection-auth-generation-id
  • iothub-connection-auth-method

Первые два свойства содержат параметры deviceId и generationId исходного устройства согласно разделу о свойствах удостоверений устройств.

Свойство iothub-connection-auth-method содержит сериализованный объект JSON, имеющий следующие свойства.

{
  "scope": "{ hub | device | module }",
  "type": "{ symkey | sas | x509 }",
  "issuer": "iothub"
}

Следующие шаги