Compartilhar via


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 ao dispositivo. Esses recursos podem ser usados nas mensagens de dispositivo para nuvem e nas mensagens de nuvem para dispositivo.

Observação

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

O Hub IoT implementa mensagens de dispositivo para nuvem usando um padrão de sistema de mensagens de streaming. As mensagens de dispositivo para nuvem do Hub IoT são mais semelhantes a eventos de Hubs de Eventos do que mensagens do Barramento de Serviço por haver um alto 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 posteriormente 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 precisar desserializar o corpo da mensagem. O Hub IoT nunca modifica essas propriedades.

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

Cada protocolo de dispositivo implementa as propriedades de configuração de maneiras diferentes. Para obter mais informações, consulte os guias do desenvolvedor Guia de protocolo MQTT e Guia de 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 de propriedades e valores só podem conter caracteres alfanuméricos ASCII, além de ! # $ % & ' * + - . ^ _ ` | ~.

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

  • As mensagens do dispositivo para a nuvem são duráveis e mantidas em um ponto de extremidade de mensagens/eventos padrão do 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 o particionamento arbitrário. As mensagens do dispositivo para a nuvem são particionadas com base em sua deviceIdde origem.

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

  • Você pode carimbar as mensagens com as informações que entrarão nas propriedades do aplicativo. Para saber mais, confira Enriquecimentos de mensagem.

Observação

Cada protocolo do Hub IoT fornece uma propriedade de tipo de conteúdo de mensagem que é respeitada durante o roteamento de 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 de dispositivo para nuvem

Propriedade Descrição Configurável pelo usuário? Palavra-chave para
consulta de roteamento
identificador-de-mensagem Um identificador configurável pelo usuário para a mensagem utilizada para padrões de resposta à solicitação. Formato: uma cadeia de caracteres que diferencia maiúsculas de minúsculas (com até 128 caracteres) de caracteres alfanuméricos ASCII de 7 bits mais - : . + % _ # * ? ! ( ) , = @ ; $ '. Sim ID da mensagem
iothub-enqueuedtime Data e hora em que a mensagem Dispositivo para Nuvem foi recebida pelo Hub IoT. Não enqueuedTime
id do usuário Uma ID usada para especificar a origem das mensagens. Sim ID do usuário
iothub-connection-device-id Uma ID definida pelo Hub IoT em mensagens do dispositivo para a nuvem. Contém a deviceId do dispositivo que enviou a mensagem. Não identificadorDoDispositivoDeConexão
ID do módulo de conexão do IoT Hub Uma ID definida pelo Hub IoT em mensagens do dispositivo para a nuvem. Contém a moduleId do dispositivo que enviou a mensagem. Não ID do Módulo de Conexão
iothub-connection-auth-generation-id Uma ID definida pelo Hub IoT em mensagens do dispositivo para a nuvem. Contém a connectionDeviceGenerationId (de acordo com as Propriedades de identidade de dispositivo) do dispositivo que enviou a mensagem. Não connectionDeviceGenerationId
Método de autenticação de conexão do iothub (iothub-connection-auth-method) Um método de autenticação definido pelo Hub IoT em mensagens do dispositivo para a nuvem. Essa 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-creation-time-utc Permite que o dispositivo envie a hora de criação do evento ao enviar dados em um lote. Sim creation-time-utc
iothub-creation-time-utc Permite que o dispositivo envie a hora de criação do evento ao enviar uma mensagem em um determinado horário. Sim creation-time-utc
dt-dataschema Esse valor é definido pelo hub IoT em mensagens do dispositivo para a nuvem. Ele contém a ID do modelo do dispositivo definida na conexão do dispositivo. Não $dt-dataschema
dt-subject O nome do componente que está enviando as mensagens do dispositivo para a nuvem. Sim $dt assunto

Propriedades do aplicativo de mensagens de dispositivo para nuvem

Um uso comum das propriedades de aplicativo é enviar um carimbo de data/hora a partir do dispositivo usando a propriedade iothub-creation-time-utc 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 de nuvem para dispositivo

Propriedade Descrição Configurável pelo usuário?
identificador-de-mensagem Um identificador configurável pelo usuário para a mensagem utilizada para padrões de resposta à solicitação. Formato: uma cadeia de caracteres que diferencia maiúsculas de minúsculas (com até 128 caracteres) de caracteres alfanuméricos ASCII de 7 bits mais - : . + % _ # * ? ! ( ) , = @ ; $ '. Sim
número de sequência Um número (exclusivo por fila de dispositivos) atribuído pelo Hub IoT a cada mensagem da nuvem para o dispositivo. Não
para Um destino especificado em mensagens Da nuvem para o dispositivo . Não
absolute-expiry-time Data e hora de expiração da mensagem. Sim
ID de correlação Uma cadeia de propriedade em uma mensagem de resposta que geralmente contém a MessageId da solicitação em padrões de solicitação-resposta. Sim
id do usuário Uma ID usada para especificar a origem das mensagens. Quando as mensagens são geradas pelo Hub IoT, a ID do usuário é o nome do hub IoT. Sim
iothub-ack Um gerador de mensagem de comentários. Essa propriedade é usada em mensagens da nuvem para o dispositivo para solicitar ao Hub IoT a geração de mensagens de comentários como resultado do consumo da mensagem pelo dispositivo. Valores possíveis: nenhum (padrão): nenhuma mensagem de comentários é gerada, positivo: ocorrerá o recebimento de uma mensagem de comentários se a mensagem estiver completa, negativo: ocorrerá o recebimento de uma mensagem de comentários se a mensagem expirar (ou se a contagem máxima de entrega tiver sido atingida) sem ser concluída pelo dispositivo ou total: positivos e negativos. Sim

Nomes de propriedades do sistema

Os nomes das propriedades do sistema variam de acordo com o ponto de extremidade para o qual as mensagens estão sendo roteadas.

Nome das propriedades do sistema Hubs de Eventos Armazenamento do Azure Barramento de Serviço Grade de Eventos
ID da mensagem identificador-de-mensagem ID da mensagem MessageId identificador-de-mensagem
Id de Usuário id do usuário ID do usuário ID do Usuário id do usuário
Id do dispositivo de conexão iothub-connection-device-id identificadorDoDispositivoDeConexão iothub-connection-device-id iothub-connection-device-id
Id do módulo de conexão ID do módulo de conexão do IoT Hub ID do Módulo de Conexão ID do módulo de conexão do IoT Hub ID do módulo de conexão do IoT Hub
ID de geração de autenticação de conexão iothub-connection-auth-generation-id connectionDeviceGenerationId iothub-connection-auth-generation-id iothub-connection-auth-generation-id
Método de autenticação de conexão Método de autenticação de conexão do iothub (iothub-connection-auth-method) connectionAuthMethod Método de autenticação de conexão do iothub (iothub-connection-auth-method) Método de autenticação de conexão do iothub (iothub-connection-auth-method)
tipo de conteúdo tipo de conteúdo tipo de conteúdo Tipo de Conteúdo iothub-content-type
codificação de conteúdo codificação de conteúdo codificação de conteúdo ContentEncoding iothub-content-encoding
iothub-enqueuedtime iothub-enqueuedtime enqueuedTime N/D iothub-enqueuedtime
CorrelationId ID de correlação correlationId CorrelationId ID de correlação
dt-dataschema dt-dataschema dt-dataschema dt-dataschema dt-dataschema
dt-subject dt-subject dt-subject dt-subject dt-subject

Tamanho da mensagem

O Hub IoT mede o tamanho da mensagem independentemente do protocolo, considerando apenas a carga 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.

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

Propriedades antifalsificação

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

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

As duas primeiras contêm a deviceId e a generationId do dispositivo de origem, conforme as Propriedades de identidade do dispositivo.

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

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

Próximas etapas