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


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

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

Примечание.

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

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

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

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

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

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

Каждый протокол устройства реализует свойства параметров различными способами. Дополнительные сведения см. в руководстве разработчика по протоколу 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
}

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

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

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

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

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

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

Имя системного свойства Event Hubs Хранилище Azure Cлужебная шина Сетка событий
Идентификатор сообщения message-id messageId MessageId message-id
Идентификатор пользователя user-id userId UserId user-id
Идентификатор устройства подключения iothub-connection-device-id connectionDeviceId iothub-connection-device-id iothub-connection-device-id
Идентификатор модуля подключения iothub-connection-module-id connectionModuleId iothub-connection-module-id iothub-connection-module-id
Идентификатор создания проверки подлинности подключения iothub-connection-auth-generation-id connectionDeviceGenerationId iothub-connection-auth-generation-id iothub-connection-auth-generation-id
Метод проверки подлинности подключения iothub-connection-auth-method connectionAuthMethod iothub-connection-auth-method iothub-connection-auth-method
contentType тип_содержимого contentType ContentType iothub-content-type
contentEncoding content-encoding contentEncoding ContentEncoding iothub-content-encoding
iothub-enqueuedtime iothub-enqueuedtime enqueuedTime Н/П iothub-enqueuedtime
CorrelationId correlation-id correlationId CorrelationId correlation-id
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"
}

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