Usar o roteamento de mensagens do Hub IoT para enviar mensagens de dispositivo para nuvem para diferentes pontos de extremidade

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 saber mais sobre as camadas do Hub IoT Básica e Standard, confira Como escolher a camada certa do Hub IoT.

Roteamento de mensagens permite que você envie mensagens de dispositivos para serviços de nuvem de maneira automatizada, escalonável e confiável. O roteamento de mensagens pode ser usado para:

  • Enviar mensagens de telemetria e eventos do dispositivo, ou seja, eventos de ciclo de vida do dispositivo, eventos de alteração de dispositivo gêmeo e eventos de estado de conexão de dispositivo para o ponto de extremidade interno e para os pontos de extremidade personalizados. Saiba mais sobre pontos de extremidade de roteamentos. Para saber mais sobre os eventos enviados de dispositivos de IoT Plug and Play, confira Entender os dispositivos gêmeos IoT Plug and Play.

  • Filtrar dados antes de roteá-los para vários pontos de extremidade aplicando consultas avançadas. O roteamento de mensagens permite consultar as propriedades da mensagem e o corpo da mensagem, bem como as marcas do dispositivo gêmeo e as propriedades do dispositivo gêmeo. Saiba mais sobre como usar consultas no roteamento de mensagens.

O Hub IoT precisa de acesso de gravação a esses pontos de extremidade para que o direcionamento de mensagens funcione. Se você configurar os pontos de extremidade por meio do Portal do Azure, as permissões necessárias serão adicionadas para você. Certifique-se de configurar os serviços para dar suporte à taxa de transferência esperada. Por exemplo, se você estiver usando Hubs de Eventos como um ponto de extremidade personalizado, deverá configurar as unidades de produtividade para esse hub de eventos para que ele possa manipular a entrada de eventos que você planeja enviar por meio do roteamento de mensagens do Hub IoT. Da mesma forma, ao usar uma Fila do Barramento de Serviço como um ponto de extremidade, você deve configurar o tamanho máximo para garantir que a fila possa conter todos os dados inseridos, até que eles sejam reinseridos pelos consumidores. Quando você configurar sua solução de IoT pela primeira vez, talvez precise monitorar os outros pontos de extremidade e fazer eventuais ajustes necessários para a carga real.

O Hub IoT define um formato comum para todas as mensagens de dispositivo para nuvem que permite a interoperabilidade entre protocolos. Se uma mensagem corresponder a várias rotas e todas apontarem para o mesmo ponto de extremidade, o Hub IoT entregará mensagens a esse ponto apenas uma vez. Portanto, você não precisa configurar a eliminação de duplicação nem no tópico nem na fila do Barramento de Serviço. Use este tutorial para aprender a configurar o roteamento de mensagem.

Pontos de extremidade de roteamento

Um Hub IoT tem um padrão de ponto de extremidade interno (mensagens/eventos) que é compatível com Hubs de Eventos. Você pode criar pontos de extremidade personalizados para encaminhar mensagens vinculando outros serviços em sua assinatura ao Hub IoT.

Cada mensagem é roteada para todos os pontos de extremidade cujas consultas de roteamento ele corresponde. Em outras palavras, uma mensagem pode ser roteada para vários pontos de extremidade.

Se o seu ponto de extremidade personalizado tiver configurações de firewall, considere o uso da exceção interna confiável da Microsoft.

No momento, o Hub IoT é compatível com os seguintes pontos de extremidade:

  • Ponto de extremidade interno
  • Armazenamento do Azure
  • Filas do Barramento de Serviço e Tópicos do Barramento de Serviço
  • Hubs de Eventos

Ponto de extremidade interno como um ponto de extremidade de roteamento

Você pode usar SDKs e integração padrão dos Hubs de Eventos para receber mensagens de dispositivo para nuvem do ponto de extremidade interno (mensagens/eventos). Depois que uma Rota é criada, os dados param de fluir para o ponto de extremidade interno, a menos que uma Rota seja criada para esse ponto de extremidade. Mesmo se nenhuma rota for criada, uma rota de fallback deverá ser habilitada para rotear mensagens para o ponto de extremidade integrado. O fallback será habilitado por padrão se você criar seu hub usando o portal ou a CLI.

Armazenamento do Microsoft Azure como um ponto de extremidade de roteamento

Há dois serviços de armazenamento para os quais o Hub IoT pode encaminhar mensagens: contas do Armazenamento de Blobs do Azure e do ADLS Gen2 (Azure Data Lake Storage Gen2). As contas do Azure Data Lake Storage são contas de armazenamento habilitadas com namespace hierárquico criadas com base no armazenamento de blob. Ambas usam blobs para armazenamento.

O Hub IoT dá suporte à gravação de dados no Armazenamento do Azure no formato Apache Avro e JSON. O padrão é AVRO. Ao usar a codificação JSON, você deve definir o contentType como application/json e o contentEncoding como UTF-8 nas propriedades do sistema de mensagem. Esses dois valores não diferenciam maiúsculas de minúsculas. Se a codificação de conteúdo não estiver definida, o Hub IoT gravará as mensagens no formato codificado de base 64.

O formato de codificação só pode ser definido quando o ponto de extremidade do armazenamento de blob estiver configurado; ele não pode ser editado para um ponto de extremidade existente. Para alternar os formatos de codificação de um ponto de extremidade existente, você precisará excluir o ponto de extremidade e recriá-lo com o formato desejado. Uma estratégia útil pode ser criar um novo ponto de extremidade personalizado com o formato de codificação desejado e adicionar uma rota paralela a esse ponto de extremidade. Dessa forma, você pode verificar seus dados antes de excluir o ponto de extremidade existente.

Você pode selecionar o formato de codificação usando o Criar do Hub IoT ou Atualizar a API REST, especificamente o RoutingStorageContainerProperties, o portal do Azure, o CLI do Azure, ou o Azure PowerShell. A imagem a seguir mostra como selecionar o formato de codificação no portal do Azure.

Codificação de ponto de extremidade de armazenamento de blob

O Hub IoT envia lotes de mensagens e grava dados no armazenamento sempre que o lote atinge um determinado tamanho ou após um determinado período de tempo decorrido. O Hub IoT segue a seguinte convenção de nomenclatura de arquivo padrão:

{iothub}/{partition}/{YYYY}/{MM}/{DD}/{HH}/{mm}

Você pode usar qualquer convenção de nomenclatura de arquivo, no entanto, é necessário usar todos os tokens listados. O Hub IoT gravará em um blob vazio se não houver nenhum dado para gravação.

É recomendável listar os blobs ou arquivos e iterar sobre eles, para garantir que todos os blobs ou arquivos sejam lidos sem fazer nenhuma suposição de partição. O intervalo de partição potencialmente pode ser alterado durante um failover iniciado pela Microsoft ou failover manual do Hub IoT. Você pode usar a Listar API de blobs para enumerar a lista de blobs ou Listar API de ADLS Gen2 para a lista de arquivos. Confira o exemplo a seguir como diretrizes.

public void ListBlobsInContainer(string containerName, string iothub)
{
    var storageAccount = CloudStorageAccount.Parse(this.blobConnectionString);
    var cloudBlobContainer = storageAccount.CreateCloudBlobClient().GetContainerReference(containerName);
    if (cloudBlobContainer.Exists())
    {
        var results = cloudBlobContainer.ListBlobs(prefix: $"{iothub}/");
        foreach (IListBlobItem item in results)
        {
            Console.WriteLine(item.Uri);
        }
    }
}

Para criar uma conta de armazenamento compatível com Azure Data Lake Gen2, crie uma nova conta de armazenamento V2 e selecione habilitado no campo Namespace hierárquico na guia Avançado, conforme mostrado na seguinte imagem:

Selecionar armazenamento Azure Date Lake Gen2

Filas do Barramento de Serviço e Tópicos do Barramento de Serviço como um ponto de extremidade de roteamento

As filas e os tópicos do Barramento de Serviço utilizados como pontos de extremidade do Hub IoT não devem ter Sessões nem Detecção Duplicada habilitadas. Se qualquer uma dessas opções estiver habilitada, o ponto de extremidade aparecerá como Inacessível no Portal do Azure.

Hubs de Eventos como um ponto de extremidade de roteamento

Além do ponto de extremidade compatível com os Hubs de Eventos internos, você também pode encaminhar dados para pontos de extremidade personalizados do tipo Hubs de Eventos.

Lendo dados que foram encaminhados

Configure uma rota seguindo este tutorial.

Use os tutoriais a seguir para saber como ler a mensagem de um ponto de extremidade.

Rota de fallback

A rota de fallback envia todas as mensagens que não atendem às condições de consulta em nenhuma das rotas existentes para os Hubs de Eventos internos em (mensagens/eventos), compatíveis com Hubs de Eventos. Se o roteamento de mensagens estiver habilitado, você poderá habilitar a funcionalidade de rota de fallback. Depois que uma rota é criada, os dados param de fluir para o ponto de extremidade interno, a menos que uma rota seja criada para esse ponto de extremidade. Se não houver nenhuma rota para o ponto de extremidade interno e houver uma rota de fallback habilitada, somente as mensagens que não corresponderem a nenhuma condição de consulta nas rotas serão enviadas ao ponto de extremidade interno. Além disso, se todas as rotas existentes forem excluídas, a rota de fallback precisará ser habilitada para receber todos os dados no ponto de extremidade interno.

Você pode habilitar/desabilitar a rota de fallback no portal do Azure–>painel Roteamento de Mensagem. Você também pode usar o Azure Resource Manager para FallbackRouteProperties para usar um ponto de extremidade personalizado para a rota de fallback.

Eventos que não são de telemetria

Além da telemetria do dispositivo, o roteamento de mensagens também permite o envio de eventos de alteração de dispositivo gêmeo, eventos de ciclo de vida do dispositivo, eventos de alteração de gêmeo digital e eventos de estado de conexão de dispositivo. Por exemplo, se uma rota é criada com a fonte de dados definida como eventos de alteração de dispositivo gêmeo, o Hub IoT envia mensagens para o ponto de extremidade que contém a alteração no dispositivo gêmeo. Da mesma forma, se uma rota for criada com a fonte de dados definida como eventos de ciclo de vida do dispositivo, o Hub IoT envia uma mensagem indicando se o dispositivo foi excluído ou criado. Como parte do IoT Plug and Play do Azure, um desenvolvedor pode criar rotas com a fonte de dados definida como eventos de alteração de gêmeo digital e o Hub IoT envia mensagens sempre que uma propriedade de gêmeo digital é definida ou alterada, um gêmeo digital é substituído ou quando ocorre um evento de alteração para o dispositivo gêmeo subjacente. Da mesma forma, se uma rota for criada com a fonte de dados definida como eventos de estado de conexão do dispositivo, o Hub IoT envia uma mensagem indicando se o dispositivo foi conectado ou desconectado.

O Hub IoT também se integra à Grade de Eventos do Azure para publicar eventos de dispositivo para dar suporte a integrações em tempo real e à automação de fluxos de trabalho com base nesses eventos. Confira as principais diferenças entre o roteamento de mensagens e Grade de Eventos para saber o que funciona melhor para seu cenário.

Limitações para eventos de estado de conexão do dispositivo

Para receber eventos de estado de conexão do dispositivo, um dispositivo deve chamar a telemetria de envio do dispositivo para a nuvem ou uma operação de mensagem de recebimento da nuvem para o dispositivo com o IoT Hub. No entanto, se um dispositivo usa o protocolo AMQP para se conectar ao Hub IoT, é recomendável que o dispositivo aça uma operação de mensagem de recebimento de nuvem para dispositivo, caso contrário, as notificações de estado de conexão podem ser atrasadas em alguns minutos. Se o dispositivo se conectar ao protocolo MQTT, o Hub IoT manterá o link da nuvem para o dispositivo aberto. Para abrir o link da nuvem para o dispositivo para AMQP, chame a API Assíncrona de Recebimento.

O link do dispositivo para a nuvem permanece aberto, desde que o dispositivo envie telemetria.

Se a conexão do dispositivo oscilar, o que significa que se o dispositivo se conecta e se desconecta com frequência, o Hub IoT não enviará todos os estados de conexão, mas publicará o estado de conexão atual capturado em um instantâneo periódico de 60 segundos até que a instabilidade pare. O recebimento do mesmo evento de estado de conexão com números de sequência diferentes ou eventos de estado de conexão diferentes significa que houve uma alteração no estado de conexão do dispositivo.

Testando rotas

Ao criar uma rota ou editar uma rota existente, você deve testar a consulta de rota com uma mensagem de exemplo. Você pode testar rotas individuais ou todas as rotas de uma vez. Não será roteada nenhuma mensagem aos pontos de extremidade durante o teste. O portal do Azure, o Azure Resource Manager, o Azure PowerShell e a CLI do Azure podem ser usados para o teste. Os resultados ajudam a identificar se a mensagem de exemplo correspondeu à consulta, se a mensagem não correspondeu à consulta ou se o teste não foi executado porque a sintaxe de mensagem ou de consulta de exemplo está incorreta. Para saber mais, confira Testar Rota e Testar todas as rotas.

Latency

Ao rotear mensagens de telemetria do dispositivo para nuvem usando pontos de extremidade internos, haverá um pequeno aumento na latência de ponta a ponta após a criação da primeira rota.

Na maioria dos casos, o aumento médio na latência é menor que 500 ms. Você pode monitorar a latência usando a métrica do Hub IoT Roteamento: latência de mensagem para mensagens/eventos ou d2c.endpoints.latency.builtIn.events. Criar ou excluir qualquer rota após a primeira não afeta a latência de ponta a ponta.

Monitoramento e solução de problemas

O Hub IoT fornece várias métricas relacionadas ao roteamento e ao ponto de extremidade para fornecer uma visão geral da integridade do hub e o número de mensagens enviadas. Para obter uma lista de todas as métricas do Hub IoT divididas por categoria funcional, confira Métricas na Referência de dados de monitoramento. Você pode rastrear os erros que ocorrem durante a avaliação de uma consulta de roteamento e a integridade do ponto de extremidade, como percebido pelo Hub IoT, com a categoria rotas nos logs de recursos do Hub IoT. Para saber mais sobre como usar as métricas e os logs de recursos com o Hub IoT, confira Monitorar o Hub IoT.

Você pode usar API REST Obter Integridade do Ponto de Extremidade para obter o status de integridade dos pontos de extremidade.

Use a Guia de solução de problemas para roteamento para obter mais detalhes e suporte a respeito.

Próximas etapas