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

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

Примечание.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Дополнительные сведения о способах кодировки и декодирования сообщений, отправляемых с помощью разных протоколов, см. в статье Понимание и использование пакетов SDK для Центра Интернета вещей Azure.

Примечание.

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

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

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

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

Системные свойства сообщений Центра Интернета вещей D2C

Свойство Description Задается пользователем? Ключевое слово для
запроса маршрутизации
message-id Задаваемый пользователем идентификатор сообщения, используемый для шаблонов типа "запрос-ответ". Формат: строка с учетом регистра (длиной до 128 знаков), состоящая из букв и цифр в 7-битовом формате ASCII + {'-', ':', '.', '+', '%', '_', '#', '*', '?', '!', '(', ')', ',', '=', '@', ';', '$', '''}. Да messageId
iothub-enqueuedtime Дата и время получения сообщения, отправленного с устройства в облако, Центром Интернета вещей. No enqueuedTime
user-id Идентификатор, используемый для указания источника сообщений. Если сообщения создает центр Интернета вещей, для этого параметра задается значение {iot hub name}. Да 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

Свойства сообщений Центра Интернета вещей D2C

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

{
  "applicationId":"5782ed70-b703-4f13-bda3-1f5f0f5c678e",
  "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":{}
}

Системные свойства сообщений Центра Интернета вещей C2D

Свойство Description Задается пользователем?
message-id Задаваемый пользователем идентификатор сообщения, используемый для шаблонов типа "запрос-ответ". Формат: строка с учетом регистра (длиной до 128 знаков), состоящая из букв и цифр в 7-битовом формате ASCII + {'-', ':', '.', '+', '%', '_', '#', '*', '?', '!', '(', ')', ',', '=', '@', ';', '$', '''}. Да
sequence-number Число (уникальное для каждой очереди устройства), которое Центр Интернета вещей назначает каждому сообщению, отправленному из облака на устройство. No
до Место назначения, которое указывается в сообщениях, отправляемых из облака на устройство. No
absolute-expiry-time Дата и время истечения срока действия сообщения. Да
correlation-id Строковое свойство в сообщении ответа, которое обычно содержит идентификатор сообщения запроса в шаблонах "запрос-ответ". Да
user-id Идентификатор, используемый для указания источника сообщений. Если сообщения создает центр Интернета вещей, для этого параметра задается значение {iot hub name}. Да
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"
}

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