Criar e ler mensagens do Hub IoT

Para oferecer suporte à interoperabilidade perfeita entre protocolos, o Hub IoT define um conjunto comum de recursos de mensagens que estão disponíveis em todos os protocolos voltados para o dispositivo. Eles podem ser usados tanto no roteamento de mensagens de dispositivo para nuvem quanto em mensagens de nuvem para dispositivo.

Nota

Alguns dos recursos mencionados neste artigo, como mensagens de nuvem para dispositivo, gêmeos de dispositivo e gerenciamento de dispositivos, estão disponíveis apenas na camada padrão do Hub IoT. Para obter mais informações sobre as camadas básica e padrão/gratuita do Hub IoT, consulte Escolha a camada certa do Hub IoT para sua solução.

O Hub IoT implementa mensagens de dispositivo para nuvem usando um padrão de mensagens de streaming. As mensagens de dispositivo para nuvem do Hub IoT são mais parecidas com eventos de Hubsde Eventos do que mensagens do Service Bus, pois há um grande volume de eventos passando pelo serviço que podem ser lidos por vários leitores.

Uma mensagem do Hub IoT consiste em:

  • Um conjunto predeterminado de propriedades do sistema, conforme listado abaixo.

  • Um conjunto de propriedades do aplicativo. Um dicionário de propriedades de cadeia de caracteres que o aplicativo pode definir e acessar, sem a necessidade de desserializar o corpo da mensagem. O Hub IoT nunca modifica essas propriedades.

  • Um corpo de mensagem, que pode ser qualquer tipo de dados.

Cada protocolo de dispositivo implementa propriedades de configuração de maneiras diferentes. Consulte os guias de desenvolvedor MQTT e AMQP relacionados para obter detalhes.

Os nomes e valores de propriedade só podem conter caracteres alfanuméricos ASCII, além de {'!', '#', '$', '%, '&', ''', '*', '+', '-', '.', '^', '_', '`', '|', '~'} quando você envia mensagens de dispositivo para nuvem usando o protocolo HTTPS ou envia mensagens de nuvem para dispositivo.

As mensagens de dispositivo para nuvem com o Hub IoT têm as seguintes características:

  • As mensagens de dispositivo para nuvem são duráveis e retidas no ponto de extremidade de mensagens/eventos padrão de um hub IoT por até sete dias.

  • As mensagens do dispositivo para a nuvem podem ter, no máximo, 256 KB e podem ser agrupadas em lotes para otimizar os envios. Os lotes podem ter, no máximo, 256 KB.

  • O Hub IoT não permite particionamento arbitrário. As mensagens de dispositivo para nuvem são particionadas com base em seu deviceId de origem.

  • Conforme explicado em Controlar o acesso ao Hub IoT, o Hub IoT permite a autenticação por dispositivo e o controle de acesso.

  • Você pode carimbar mensagens com informações que vão para as propriedades do aplicativo. Para obter mais informações, consulte Enriquecimento de mensagens.

Para obter mais informações sobre como codificar e decodificar mensagens enviadas usando protocolos diferentes, consulte Azure IoT SDKs.

Nota

Cada protocolo do Hub IoT fornece uma propriedade de tipo de conteúdo de mensagem que é respeitada ao rotear dados para pontos de extremidade personalizados. Para que seus dados sejam tratados corretamente no destino (por exemplo, JSON sendo tratado como uma cadeia de caracteres analisável em vez de dados binários codificados em Base64), você deve fornecer o tipo de conteúdo e o conjunto de caracteres apropriados para a mensagem.

Para usar o corpo da mensagem em uma consulta de roteamento do Hub IoT, você deve fornecer um objeto JSON válido para a mensagem e definir a propriedade de tipo de conteúdo da mensagem como application/json;charset=utf-8.

Um corpo de mensagem válido e roteável pode ter a seguinte aparência:

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

Propriedades do sistema de mensagens do Hub IoT D2C

Property Description Usuário Settable? Palavra-chave para
consulta de roteamento
ID da mensagem Um identificador configurável pelo usuário para a mensagem usada para padrões de solicitação-resposta. Formato: Uma cadeia de caracteres que diferencia maiúsculas de minúsculas (até 128 caracteres) de caracteres alfanuméricos ASCII de 7 bits + {'-', ':', '.', '+', '%', '_', '#', '*', '?', '!', '(', ')', ',', '=', '@', ';', '$', '''}. Sim messageId
iothub-enqueuedtime Data e hora em que a mensagem Device-to-Cloud foi recebida pelo Hub IoT. Não enqueuedTime
ID de utilizador Um ID usado para especificar a origem das mensagens. Quando as mensagens são geradas pelo Hub IoT, ele é definido como {iot hub name}. Sim ID de Utilizador
iothub-connection-device-id Um ID definido pelo Hub IoT em mensagens de dispositivo para nuvem. Ele contém o deviceId do dispositivo que enviou a mensagem. Não connectionDeviceId
iothub-conexão-módulo-id Um ID definido pelo Hub IoT em mensagens de dispositivo para nuvem. Ele contém o moduleId do dispositivo que enviou a mensagem. Não connectionModuleId
iothub-connection-auth-geração-id Um ID definido pelo Hub IoT em mensagens de dispositivo para nuvem. Ele contém o connectionDeviceGenerationId (de acordo com as propriedades de identidade do dispositivo) do dispositivo que enviou a mensagem. Não connectionDeviceGenerationId
iothub-connection-auth-método Um método de autenticação definido pelo Hub IoT em mensagens de dispositivo para nuvem. Esta propriedade contém informações sobre o método de autenticação usado para autenticar o dispositivo que envia a mensagem. Não connectionAuthMethod
iothub-app-iothub-criação-tempo-utc Permite que o dispositivo envie o tempo de criação do evento ao enviar dados em lote. Sim criação-time-utc
iothub-criação-tempo-utc Permite que o dispositivo envie o tempo de criação do evento ao enviar uma mensagem de cada vez. Sim criação-time-utc
DT-DataSchema Esse valor é definido pelo hub IoT em mensagens de dispositivo para nuvem. Ele contém o ID do modelo do dispositivo definido na conexão do dispositivo. Não $dt-dataschema
dt-sujeito O nome do componente que está enviando as mensagens do dispositivo para a nuvem. Sim $dt-sujeito

Propriedades do aplicativo de mensagens do Hub IoT D2C

Um uso comum das propriedades do aplicativo é enviar um carimbo de data/hora do dispositivo usando a iothub-creation-time-utc propriedade para registrar quando a mensagem foi enviada pelo dispositivo. O formato deste carimbo de data/hora deve ser UTC sem informações de fuso horário. Por exemplo, 2021-04-21T11:30:16Z é válido, 2021-04-21T11:30:16-07:00 é inválido:

{
  "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":{}
}

Propriedades do sistema de mensagens do Hub IoT C2D

Property Description Usuário Settable?
ID da mensagem Um identificador configurável pelo usuário para a mensagem usada para padrões de solicitação-resposta. Formato: Uma cadeia de caracteres que diferencia maiúsculas de minúsculas (até 128 caracteres) de caracteres alfanuméricos ASCII de 7 bits + {'-', ':', '.', '+', '%', '_', '#', '*', '?', '!', '(', ')', ',', '=', '@', ';', '$', '''}. Sim
número-sequência Um número (exclusivo por fila de dispositivos) atribuído pelo Hub IoT a cada mensagem de nuvem para dispositivo. Não
para Um destino especificado em mensagens de nuvem para dispositivo . Não
tempo de expiração absoluto Data e hora de expiração da mensagem. Sim
Correlação-ID Uma propriedade string em uma mensagem de resposta que normalmente contém o MessageId da solicitação, em padrões request-response. Sim
ID de utilizador Um ID usado para especificar a origem das mensagens. Quando as mensagens são geradas pelo Hub IoT, ele é definido como {iot hub name}. Sim
IOTHUB-ACK Um gerador de mensagens de feedback. Essa propriedade é usada em mensagens da nuvem para o dispositivo para solicitar que o Hub IoT gere mensagens de feedback como resultado do consumo da mensagem pelo dispositivo. Valores possíveis: nenhum (padrão): nenhuma mensagem de feedback é gerada, positivo: recebe uma mensagem de feedback se a mensagem foi concluída, negativo: recebe uma mensagem de feedback se a mensagem expirou (ou a contagem máxima de entrega foi atingida) sem ser concluída pelo dispositivo, ou completa: positiva e negativa. Sim

Nomes de propriedades do sistema

Os nomes das propriedades do sistema variam com base no ponto de extremidade para o qual as mensagens estão sendo roteadas. Consulte a tabela abaixo para obter detalhes sobre esses nomes.

Nome da propriedade do sistema Hubs de Eventos Armazenamento do Azure Service Bus Event Grid
ID da mensagem ID da mensagem messageId MessageId ID da mensagem
ID do utilizador ID de utilizador ID de Utilizador UserId ID de utilizador
ID do dispositivo de conexão iothub-connection-device-id connectionDeviceId iothub-connection-device-id iothub-connection-device-id
ID do módulo de conexão iothub-conexão-módulo-id connectionModuleId iothub-conexão-módulo-id iothub-conexão-módulo-id
ID de geração de autenticação de conexão iothub-connection-auth-geração-id connectionDeviceGenerationId iothub-connection-auth-geração-id iothub-connection-auth-geração-id
Método de autenticação de conexão iothub-connection-auth-método connectionAuthMethod iothub-connection-auth-método iothub-connection-auth-método
contentType tipo de conteúdo contentType Tipo de conteúdo iothub-content-type
contentEncoding codificação de conteúdo contentEncoding Codificação de conteúdo iothub-codificação de conteúdo
iothub-enqueuedtime iothub-enqueuedtime enqueuedTime N/A iothub-enqueuedtime
CorrelationId Correlação-ID correlationId CorrelationId Correlação-ID
DT-DataSchema DT-DataSchema DT-DataSchema DT-DataSchema DT-DataSchema
dt-sujeito dt-sujeito dt-sujeito dt-sujeito dt-sujeito

Tamanho da mensagem

O Hub IoT mede o tamanho da mensagem de forma independente de protocolo, considerando apenas a carga útil real. O tamanho em bytes é calculado como a soma dos seguintes valores:

  • O tamanho do corpo em bytes.
  • O tamanho em bytes de todos os valores das propriedades do sistema de mensagens.
  • O tamanho em bytes de todos os nomes e valores de propriedade do usuário.

Os nomes e valores de propriedade são limitados a caracteres ASCII, portanto, o comprimento das cadeias de caracteres é igual ao tamanho em bytes.

Propriedades anti-falsificação

Para evitar falsificação de dispositivo em mensagens de dispositivo para nuvem, o Hub IoT carimba todas as mensagens com as seguintes propriedades:

  • iothub-connection-device-id
  • iothub-connection-auth-geração-id
  • iothub-connection-auth-método

Os dois primeiros contêm o deviceId e generationId do dispositivo de origem, de acordo com as propriedades de identidade do dispositivo.

A propriedade iothub-connection-auth-method contém um objeto serializado JSON, com as seguintes propriedades:

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

Próximos passos

  • Para obter informações sobre limites de tamanho de mensagem no Hub IoT, consulte Cotas e limitação do Hub IoT.
  • Para saber como criar e ler mensagens do Hub IoT em várias linguagens de programação, consulte os Inícios rápidos.
  • Para saber mais sobre a estrutura de eventos não telemétricos gerados pelo Hub IoT, consulte Esquemas de eventos não telemétricos do Hub IoT.