Criar e ler mensagens do Hub IoT
Para dar suporte à interoperabilidade 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. Esses recursos podem ser usados em mensagens de dispositivo para nuvem e 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 Hubs de Eventos do que mensagens do Service Bus, pois há um grande volume de eventos passando pelo serviço que vários leitores podem ler.
Uma mensagem do Hub IoT consiste em:
Um conjunto predeterminado de propriedades do sistema, conforme descrito mais adiante neste artigo.
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. Para obter mais informações, consulte o guia do protocolo MQTT e os guias do desenvolvedor do guia do protocolo AMQP para obter detalhes.
Quando você envia mensagens de dispositivo para nuvem usando o protocolo HTTPS ou envia mensagens de nuvem para dispositivo, os nomes e valores de propriedade só podem conter caracteres alfanuméricos ASCII, além ! # $ % & ' * + - . ^ _ ` | ~
de .
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.
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), forneça 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, forneça um objeto JSON válido para a mensagem e defina a propriedade de tipo de conteúdo da mensagem como application/json;charset=utf-8
.
O exemplo a seguir mostra um corpo de mensagem válido e roteável:
{
"timestamp": "2022-02-08T20:10:46Z",
"tag_name": "spindle_speed",
"tag_value": 100
}
Propriedades do sistema de mensagens do dispositivo para a nuvem
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 mais - : . + % _ # * ? ! ( ) , = @ ; $ ' . |
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. | 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 dispositivo para a nuvem
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, mas 2021-04-21T11:30:16-07:00
é inválido.
{
"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":{}
}
Propriedades do sistema de mensagens da nuvem para o dispositivo
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 mais - : . + % _ # * ? ! ( ) , = @ ; $ ' . |
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, o ID do usuário é o nome do hub IoT. | 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.
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.