Utilizar o encaminhamento de mensagens Hub IoT para enviar mensagens do dispositivo para a cloud para diferentes pontos finais

Nota

Algumas das funcionalidades mencionadas neste artigo, como mensagens da cloud para o dispositivo, dispositivos duplos e gestão de dispositivos, só estão disponíveis na camada padrão de Hub IoT. Para obter mais informações sobre as camadas de Hub IoT básicas e padrão/gratuitas, consulte Escolher o escalão de Hub IoT adequado para a sua solução.

O encaminhamento de mensagens permite-lhe enviar mensagens dos seus dispositivos para serviços cloud de forma automatizada, dimensionável e fiável. O encaminhamento de mensagens pode ser utilizado para:

  • Enviar mensagens telemetria de dispositivos, bem como eventos , nomeadamente eventos de ciclo de vida do dispositivo, eventos de alteração de dispositivos duplos, eventos de alteração de duplos digitais e eventos de estado de ligação do dispositivo para o ponto final incorporado e pontos finais personalizados. Saiba mais sobre os pontos finais de encaminhamento. Para saber mais sobre os eventos enviados a partir de dispositivos IoT Plug and Play, veja Compreender o IoT Plug and Play os duplos digitais.

  • Filtrar dados antes de encaminhá-lo para vários pontos finais ao aplicar consultas avançadas. O encaminhamento de mensagens permite-lhe consultar as propriedades da mensagem e o corpo da mensagem, bem como as etiquetas do dispositivo duplo e as propriedades do dispositivo duplo. Saiba mais sobre como utilizar consultas no encaminhamento de mensagens.

Hub IoT precisa de acesso de escrita a estes pontos finais de serviço para que o encaminhamento de mensagens funcione. Se configurar os seus pontos finais através do portal do Azure, as permissões necessárias são adicionadas por si. Certifique-se de que configura os seus serviços para suportar o débito esperado. Por exemplo, se estiver a utilizar os Hubs de Eventos como um ponto final personalizado, tem de configurar as unidades de débito desse hub de eventos para que possa processar a entrada de eventos que planeia enviar através do encaminhamento de mensagens Hub IoT. Da mesma forma, ao utilizar uma Fila do Service Bus como ponto final, tem de configurar o tamanho máximo para garantir que a fila pode conter todos os dados ingressados, até que sejam efetuados pelos consumidores. Quando configurar a sua solução IoT pela primeira vez, poderá ter de monitorizar os outros pontos finais e fazer os ajustes necessários para a carga real.

O Hub IoT define um formato comum para todas as mensagens do dispositivo para a cloud para interoperabilidade entre protocolos. Se uma mensagem corresponder a várias rotas que apontam para o mesmo ponto final, Hub IoT entrega a mensagem para esse ponto final apenas uma vez. Por conseguinte, não precisa de configurar a eliminação de duplicados na fila ou tópico do Service Bus. Utilize este tutorial para saber como configurar o encaminhamento de mensagens.

Pontos finais de encaminhamento

Um hub IoT tem um ponto final incorporado predefinido (mensagens/eventos) compatível com os Hubs de Eventos. Pode criar pontos finais personalizados para encaminhar mensagens ao ligar outros serviços na sua subscrição ao hub IoT.

Cada mensagem é encaminhada para todos os pontos finais cujas consultas de encaminhamento correspondem. Por outras palavras, uma mensagem pode ser encaminhada para vários pontos finais.

Se o ponto final personalizado tiver configurações de firewall, considere utilizar a exceção de primeira entidade fidedigna da Microsoft.

Hub IoT suporta atualmente os seguintes pontos finais:

  • Ponto final incorporado
  • Contentores de armazenamento
  • Tópicos das Filas e do Service Bus do Service Bus
  • Hubs de Eventos
  • Cosmos DB (pré-visualização)

Ponto final incorporado como ponto final de encaminhamento

Pode utilizar a integração padrão dos Hubs de Eventos e os SDKs para receber mensagens do dispositivo para a nuvem a partir do ponto final incorporado (mensagens/eventos). Assim que uma rota é criada, os dados deixam de fluir para o ponto final incorporado, a menos que seja criada uma rota para esse ponto final. Mesmo que não sejam criadas rotas, tem de ser ativada uma rota de contingência para encaminhar mensagens para o ponto final incorporado. A contingência está ativada por predefinição se criar o hub com o portal ou a CLI.

Armazenamento do Microsoft Azure como um ponto final de encaminhamento

Existem dois serviços de armazenamento Hub IoT podem encaminhar mensagens para: contas de Armazenamento de Blobs do Azure e Azure Data Lake Storage Gen2 (ADLS Gen2). Azure Data Lake Storage contas são contas de armazenamento com espaço de nomes hierárquico criadas sobre o armazenamento de blobs. Ambos utilizam blobs para o respetivo armazenamento.

Hub IoT suporta a escrita de dados no Armazenamento do Azure no formato Apache Avro e no formato JSON. A predefinição é AVRO. Ao utilizar a codificação JSON, tem de definir a propriedade contentType para a propriedade application/json e contentEncoding como UTF-8 nas propriedades do sistema de mensagens. Ambos os valores não são sensíveis a maiúsculas e minúsculas. Se a codificação de conteúdos não estiver definida, Hub IoT escreverá as mensagens no formato codificado base 64.

O formato de codificação só pode ser definido quando o ponto final de armazenamento de blobs estiver configurado; não pode ser editado para um ponto final existente. Para mudar os formatos de codificação para um ponto final existente, primeiro terá de eliminar o ponto final e, em seguida, criá-lo novamente com o formato pretendido. Uma estratégia útil pode ser criar um novo ponto final personalizado com o formato de codificação pretendido e adicionar uma rota paralela a esse ponto final. Desta forma, pode verificar os seus dados antes de eliminar o ponto final existente.

Pode selecionar o formato de codificação com a Hub IoT Criar ou Atualizar API REST, especificamente o RoutingStorageContainerProperties, o portal do Azure, a CLI do Azure ou Azure PowerShell. A imagem seguinte mostra como selecionar o formato de codificação no portal do Azure.

Codificação do ponto final de armazenamento de blobs.

Hub IoT em lotes de mensagens e escreve dados no armazenamento sempre que o lote atinge um determinado tamanho ou uma determinada quantidade de tempo decorrido. Hub IoT predefinição para a seguinte convenção de nomenclatura de ficheiros:

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

Pode utilizar qualquer convenção de nomenclatura de ficheiros, no entanto, tem de utilizar todos os tokens listados. Hub IoT escreverá num blob vazio se não existirem dados para escrever.

Recomendamos que liste os blobs ou ficheiros e, em seguida, itera sobre os mesmos, para garantir que todos os blobs ou ficheiros são lidos sem fazer suposições de partição. O intervalo de partições pode potencialmente ser alterado durante uma ativação pós-falha iniciada pela Microsoft ou Hub IoT ativação pós-falha manual. Pode utilizar a API de Blobs de Lista para enumerar a lista de blobs ou Listar a API ADLS Gen2 para a lista de ficheiros. Veja o exemplo seguinte como documentação de orientação.

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 o Azure Data Lake Gen2, crie uma nova conta de armazenamento V2 e selecione Ativar espaço de nomes hierárquico na secção Data Lake Storage Gen2 do separador Avançadas, conforme mostrado na imagem seguinte:

Selecione Armazenamento do Azure Date Lake Gen2.

Tópicos de Filas e Service Bus do Service Bus como ponto final de encaminhamento

As filas e tópicos do Service Bus utilizados como pontos finais Hub IoT não podem ter Sessões ou Deteção duplicada ativada. Se alguma dessas opções estiver ativada, o ponto final será apresentado como Inacessível no portal do Azure.

Hubs de Eventos como um ponto final de encaminhamento

Além do ponto final compatível com Hubs de Eventos incorporados, também pode encaminhar dados para pontos finais personalizados do tipo Hubs de Eventos.

Azure Cosmos DB como ponto final de encaminhamento (pré-visualização)

Pode enviar dados diretamente para o Azure Cosmos DB a partir de Hub IoT. O Cosmos DB é um serviço de base de dados de vários modelos de hiperescala totalmente gerido. Fornece baixa latência e elevada disponibilidade, tornando-a uma ótima opção para cenários como soluções ligadas e fabrico que requerem uma análise extensiva de dados a jusante.

Hub IoT suporta a escrita no Cosmos DB em JSON (se especificado no tipo de conteúdo da mensagem) ou como binário codificado base64. Pode configurar um ponto final do Cosmos DB para encaminhamento de mensagens ao executar os seguintes passos no portal do Azure:

  1. Navegue para o hub IoT aprovisionado.

  2. No menu de recursos, selecione Encaminhamento de mensagens a partir das definições do Hub.

  3. Selecione o separador Pontos finais personalizados no painel de trabalho e, em seguida, selecione Adicionar e selecione Cosmos DB (pré-visualização) na lista pendente.

    A imagem seguinte mostra as opções de adição de pontos finais no painel de trabalho do portal do Azure:

    Captura de ecrã que mostra como adicionar um ponto final do Cosmos DB.

  4. Escreva um nome para o ponto final do Cosmos DB em Nome do ponto final.

  5. Na conta do Cosmos DB, escolha uma conta do Cosmos DB existente a partir de uma lista de contas do Cosmos DB disponíveis para seleção e, em seguida, selecione uma base de dados e uma coleção existentes na Base de Dados e na Coleção, respetivamente.

  6. Em Gerar uma chave de partição sintética para mensagens, selecione Ativar , se necessário.

    Para suportar eficazmente cenários de alta escala, pode ativar chaves de partição sintéticas para o ponto final do Cosmos DB. Como o Cosmos DB é um arquivo de dados de hiperescala, todos os dados/documentos escritos no mesmo têm de conter um campo que represente uma partição lógica. Cada partição lógica tem um tamanho máximo de 20 GB. Pode especificar o nome da propriedade da chave de partição no nome da chave de partição. O nome da propriedade da chave de partição é definido ao nível do contentor e não pode ser alterado depois de ter sido definido.

    Pode configurar o valor da chave de partição sintética ao especificar um modelo no modelo de chave de partição com base no volume de dados estimado. Por exemplo, nos cenários de fabrico, é de esperar que a partição lógica se aproxime do limite máximo de 20 GB num mês. Nesse caso, pode definir uma chave de partição sintética como uma combinação do ID do dispositivo e do mês. O valor da chave de partição gerada é adicionado automaticamente à propriedade da chave de partição para cada novo registo do Cosmos DB, garantindo que as partições lógicas são criadas todos os meses para cada dispositivo.

  7. Em Tipo de autenticação, escolha um tipo de autenticação para o ponto final do Cosmos DB. Pode escolher qualquer um dos tipos de autenticação suportados para aceder à base de dados, com base na configuração do sistema.

    Atenção

    Se estiver a utilizar a identidade gerida atribuída pelo sistema para autenticar no Cosmos DB, tem de utilizar a CLI do Azure ou Azure PowerShell para atribuir a definição de função incorporada contribuidor de dados incorporado do Cosmos DB à identidade. A atribuição de funções para o Cosmos DB não é atualmente suportada a partir do portal do Azure. Para obter mais informações sobre as várias funções, veja Configurar o acesso baseado em funções para o Azure Cosmos DB. Para compreender a atribuição de funções através da CLI, veja Gerir recursos de função SQL do Azure Cosmos DB.

  8. Selecione Criar para concluir a criação do ponto final personalizado.

Para saber mais sobre como utilizar o portal do Azure para criar rotas de mensagens e pontos finais para o seu hub IoT, consulte Encaminhamento de mensagens com Hub IoT — portal do Azure.

Ler dados que foram encaminhados

Pode configurar uma rota ao seguir este tutorial.

Utilize os tutoriais seguintes para saber como ler mensagens a partir de um ponto final.

Rota de contingência

A rota de contingência envia todas as mensagens que não satisfazem as condições de consulta em nenhuma das rotas existentes para o ponto final incorporado (mensagens/eventos), que é compatível com os Hubs de Eventos. Se o encaminhamento de mensagens estiver ativado, pode ativar a capacidade de rota de contingência. Assim que uma rota é criada, os dados deixam de fluir para o ponto final incorporado, a menos que seja criada uma rota para esse ponto final. Se não existirem rotas para o ponto final incorporado e uma rota de contingência estiver ativada, apenas as mensagens que não corresponderem a quaisquer condições de consulta nas rotas serão enviadas para o ponto final incorporado. Além disso, se todas as rotas existentes forem eliminadas, a capacidade de rota de contingência tem de estar ativada para receber todos os dados no ponto final incorporado.

Pode ativar ou desativar a rota de contingência no portal do Azure, no painel Encaminhamento de mensagens. Também pode utilizar o Azure Resource Manager para FallbackRouteProperties para utilizar um ponto final personalizado para a rota de contingência.

Eventos não telemétricos

Além da telemetria do dispositivo, o encaminhamento de mensagens também permite o envio de eventos não telemétricos, incluindo:

  • Eventos de alteração de dispositivo duplo
  • Eventos de ciclo de vida do dispositivo
  • Eventos de ciclo de vida da tarefa do dispositivo
  • Eventos de alteração de duplos digitais
  • Eventos de estado de ligação do dispositivo
  • Mensagens de mediador MQTT

Por exemplo, se for criada uma rota com a origem de dados definida como Eventos de Alteração de Dispositivo Duplo, Hub IoT envia mensagens para o ponto final que contém a alteração no dispositivo duplo. Da mesma forma, se for criada uma rota com a origem de dados definida como Eventos de Ciclo de Vida do Dispositivo, Hub IoT envia uma mensagem a indicar se o dispositivo ou módulo foi eliminado ou criado. Para obter mais informações sobre os eventos de ciclo de vida dos dispositivos, veja Notificações do ciclo de vida do dispositivo e do módulo. Ao utilizar o Azure IoT Plug and Play, um programador pode criar rotas com a origem de dados definida como Eventos de Alteração de Duplo Digital e Hub IoT envia mensagens sempre que uma propriedade de duplo digital é definida ou alterada, um duplo digital é substituído ou quando ocorre um evento de alteração para o dispositivo duplo subjacente. Por fim, se for criada uma rota com a origem de dados definida como Eventos de Estado da Ligação do Dispositivo, Hub IoT envia uma mensagem a indicar se o dispositivo foi ligado ou desligado.

Hub IoT também se integra com Azure Event Grid para publicar eventos de dispositivos para suportar integrações em tempo real e automatização de fluxos de trabalho com base nestes eventos. Veja as principais diferenças entre o encaminhamento de mensagens e o Event Grid para saber o que funciona melhor para o seu cenário.

Limitações dos eventos de estado de ligação do dispositivo

Os eventos de estado de ligação do dispositivo estão disponíveis para dispositivos que se ligam através do protocolo MQTT ou AMQP ou através de qualquer um destes protocolos através de WebSockets. Os pedidos feitos apenas com HTTPS não acionam notificações de estado de ligação do dispositivo. Para Hub IoT começar a enviar eventos de estado de ligação do dispositivo, depois de abrir uma ligação, um dispositivo tem de chamar a operação de mensagem de receção da cloud para o dispositivo ou a operação de telemetria de envio do dispositivo para a cloud. Fora dos SDKs do Azure IoT, no MQTT estas operações equivalem a subscrever ou publicar operações nos tópicos de mensagens adequados. Através do AMQP, estas operações equivalem a anexar ou transferir uma mensagem nos caminhos de ligação adequados.

Hub IoT não comunica a ligação e a desconexão de cada dispositivo individual, mas publica o estado de ligação atual efetuada num instantâneo periódico de 60 segundos. Receber o mesmo evento de estado de ligação com números de sequência diferentes ou eventos de estado de ligação diferentes significa que houve uma alteração no estado de ligação do dispositivo durante a janela de 60 segundos.

Testar rotas

Quando cria uma nova rota ou edita uma rota existente, deve testar a consulta de rota com uma mensagem de exemplo. Pode testar rotas individuais ou testar todas as rotas ao mesmo tempo e nenhuma mensagem é encaminhada para os pontos finais durante o teste. portal do Azure, o Azure Resource Manager, o Azure PowerShell e a CLI do Azure podem ser utilizados para testes. Os resultados ajudam a identificar se a mensagem de exemplo correspondeu ou não à consulta ou se o teste não pôde ser executado porque a sintaxe da mensagem de exemplo ou da consulta está incorreta. Para saber mais, veja Testar Rota e Testar Todas as Rotas.

Latência

Quando encaminha mensagens de telemetria do dispositivo para a cloud através de pontos finais incorporados, há um ligeiro aumento na latência ponto a ponto após a criação da primeira rota.

Na maioria dos casos, o aumento médio da latência é inferior a 500 milissegundos. No entanto, a latência que experiencia pode variar e pode ser maior consoante a camada do hub IoT e a arquitetura da solução. Pode monitorizar a latência com o Encaminhamento: latência de mensagens para mensagens/eventos ou d2c.endpoints.latency.builtIn.events Hub IoT métricas. A criação ou eliminação de qualquer rota após a primeira não afeta a latência ponto a ponto.

Monitorizar e resolver problemas

Hub IoT fornece várias métricas relacionadas com o encaminhamento e os pontos finais para lhe dar uma descrição geral do estado de funcionamento do hub e das mensagens enviadas. Para obter uma lista de todas as métricas de Hub IoT divididas por categoria funcional, veja a secção Métricas de Monitorização Hub IoT do Azure referência de dados. Pode monitorizar os erros que ocorrem durante a avaliação de uma consulta de encaminhamento e estado de funcionamento do ponto final conforme considerado pelo Hub IoT com a categoria rotas nos registos de recursos do Hub IoT. Para saber mais sobre como utilizar métricas e registos de recursos com Hub IoT, veja Monitorizar Hub IoT do Azure.

Pode utilizar a API REST Obter Estado de Funcionamento do Ponto Final para obter o estado de funcionamento dos pontos finais.

Utilize o guia de resolução de problemas para encaminhamento para obter mais detalhes e suporte para resolver problemas do encaminhamento.

Passos seguintes