Rotear mensagens MQTT no Grade de Eventos do Azure

O Event Grid permite que você roteie suas mensagens MQTT para serviços ou webhooks do Azure para processamento adicional. Ao rotear esses dados, você pode construir soluções de ponta a ponta que utilizam seus dados de IoT para análise, armazenamento e visualização.

Este artigo explica quando usar o roteamento e mostra como configurar o roteamento para um tema de namespace de Grade de Eventos ou para um tópico personalizado.

Diagrama que mostra mensagens MQTT sendo roteadas de dispositivos, por meio do Grade de Eventos do Azure, para manipuladores, como serviços do Azure, webhooks e aplicativos.

Quando usar o roteamento

Rotear as mensagens dos seus clientes para um serviço do Azure ou para seu endpoint personalizado ajuda a maximizar os benefícios desses dados. A lista a seguir descreve alguns dos muitos casos de uso desse recurso:

  • Análise de dados: Extraia e analise as mensagens roteadas dos seus clientes para otimizar sua solução. Por exemplo, analise a telemetria das suas máquinas para prever quando agendar a manutenção antes que ocorram falhas, para evitar atrasos e danos adicionais.
  • Aplicações sem servidor: Acione uma função sem servidor com base nas mensagens roteadas de seus clientes. Por exemplo, quando um sensor de movimento detectar movimento, envie uma notificação para a equipe de segurança para resolvê-lo.
  • Visualizações de dados: Crie visualizações dos dados encaminhados de seus clientes para representá-los e compreendê-los, além de destacar tendências e valores atípicos.

Configurar roteamento

A configuração de roteamento permite que você envie todas as suas mensagens MQTT dos seus clientes para um tópico de namespace de Grade de Eventos ou para um tópico personalizado de Grade de Eventos. Depois que as mensagens estiverem no tópico, você poderá configurar uma assinatura de evento para consumir as mensagens do tópico. Use as seguintes etapas de alto nível para obter essa configuração:

  • Tópico do namespace como destino de roteamento:
    • Crie um tópico de namespace para Grade de Eventos onde a Grade de Eventos roteia todas as mensagens MQTT.
    • Crie uma assinatura de evento do tipo push para encaminhar essas mensagens para um dos serviços do Azure suportados ou para um webhook personalizado, ou crie uma assinatura de evento do tipo fila para puxar as mensagens diretamente do tópico do namespace através da sua aplicação.
    • Defina a configuração de roteamento que se refere ao tópico que você criou na primeira etapa.

Diagrama do roteamento de mensagens MQTT para tópicos de namespace.

Diagrama do roteamento de mensagens MQTT para tópicos personalizados.

Observação

Desabilitar o acesso público à rede no namespace faz com que o roteamento MQTT falhe.

Diferença entre tópicos de namespace e tópicos personalizados como um destino de roteamento

A tabela a seguir mostra a diferença entre tópicos de namespace e tópicos personalizados como um destino de roteamento. Para uma divisão detalhada de quais cotas e limites cada recurso da Grade de Eventos inclui, veja Cotas e limites.

Ponto de comparação Tópico do namespace Tópico personalizado
Produtividade Alta, até 40 MB/s (entrada) e 80 MB/s (saída) Baixo, até 5 MB/s (entrada e saída)
Entrega pull Sim No
Entrega por push para Hubs de Eventos Sim Sim
Entrega por push para serviços do Azure (Funções, Webhooks, filas e tópicos do Barramento de Serviço, conexões híbridas de retransmissão e filas de armazenamento) No Sim
Retenção de mensagens 7 dias 1 dia
Requisito de atribuição de função Não é necessário porque o corretor MQTT e o tópico do namespace estão sob o mesmo namespace É obrigatório porque o namespace que hospeda a funcionalidade do broker MQTT e o tópico personalizado são recursos diferentes

Requisitos para roteamento de tópicos personalizados na Grade de Eventos

O tópico personalizado Grade de Eventos que você usa para roteamento precisa cumprir os seguintes requisitos:

  • Ele precisa usar o esquema CloudEvents v1.0.
  • Ele precisa estar na mesma região que o namespace.
  • Você precisa atribuir o papel de Remetente de Dados da Grade de Eventos para si mesmo ou para a identidade gerenciada selecionada no tópico personalizado da Grade de Eventos antes de aplicar a configuração de roteamento. Para atribuir o papel:
    1. No portal, vá para o recurso tópico da Grade de Eventos que você criou.
    2. No menu de controle de acesso (IAM ), selecione Adicionar atribuição de função.
    3. Na aba Função , selecione Event Grid Data Sender e depois selecione Próximo.
    4. Na aba Membros, selecione Selecionar membros, depois insira seu nome de usuário Microsoft Entra na caixa Selecionar que aparece (por exemplo, user@contoso.com).
    5. Selecione seu nome de usuário Microsoft Entra e selecione Avaliar + atribuir.

Configuração do portal do Azure

Para configurar o roteamento:

  1. Acesse seu namespace no portal do Azure.
  2. Em Roteamento, selecione Habilitar roteamento.
  3. Para o tipo de tópico, selecione entre o tema do espaço de nomes ou o tópico personalizado.
  4. Para o Tópico, selecione o tópico que você criou onde todas as mensagens MQTT são roteadas.
  5. Se você selecionar um tópico personalizado, a seção Identidade Gerenciada para Entrega aparece. Selecione uma das seguintes opções para a identidade que autentica o corretor MQTT enquanto ele entrega as mensagens MQTT ao tópico personalizado:
    • Nenhum: Atribua a função de Remetente de Dados da Grade de Eventos para você mesmo no tópico personalizado.
    • Identidade atribuída ao sistema: Ative a identidade atribuída ao sistema no namespace como pré-requisito e atribua o papel de Remetente de Dados da Grade de Eventos à identidade atribuída pelo sistema no tópico personalizado.
    • Identidade atribuída pelo usuário: Ative a identidade atribuída pelo usuário no namespace como pré-requisito e atribua o papel de Remetente de Dados da Grade de Eventos à identidade selecionada no tópico personalizado. Se você selecionar Identidade atribuída pelo usuário, aparece um menu suspenso para que você possa selecionar a identidade.
  6. Selecione Aplicar.

Captura de tela mostrando a configuração de roteamento pelo portal.

Para obter instruções de configuração de enriquecimentos, acesse a configuração do portal de enriquecimento.

Configuração da CLI do Azure

az resource create --resource-type Microsoft.EventGrid/namespaces --id /subscriptions/<Subscription ID>/resourceGroups/<Resource Group>/providers/Microsoft.EventGrid/namespaces/<Namespace Name> --is-full-object --api-version 2023-06-01-preview --properties @./resources/NS.json

NS.json

{
    "properties": {
        "inputSchema": "CloudEventSchemaV1_0",
        "topicSpacesConfiguration": {
            "state": "Enabled",
            "routeTopicResourceId": "/subscriptions/<Subscription ID>/resourceGroups/<Resource Group>/providers/Microsoft.EventGrid/topics/<Event Grid topic name>",
            "routingIdentityInfo": {
                "type": "UserAssigned",
                "userAssignedIdentity": "/subscriptions/<Subscription ID>/resourceGroups/<Resource Group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<User-assigned identity>"
            }
        }
    }
}

Em routingIdentityInfo, type aceita None, SystemAssigned, ou UserAssigned. Defina userAssignedIdentity apenas quando type é UserAssigned.

Para obter instruções de configuração de enriquecimentos, vá para a configuração da CLI de Enriquecimento.

Comportamento de roteamento de mensagens MQTT

Ao rotear mensagens MQTT para tópicos personalizados, a Grade de Eventos fornece entrega durável, pois tenta entregar cada mensagem pelo menos uma vez imediatamente. Se houver uma falha, o Event Grid ou tenta a entrega novamente ou descarta a mensagem destinada ao roteamento. A Grade de Eventos não garante a ordem de entrega dos eventos, portanto, os assinantes podem recebê-los fora de ordem.

A tabela a seguir descreve o comportamento do roteamento de mensagens MQTT com base em erros diferentes.

Erro Descrição do erro Comportamento
TopicNotFoundError O tópico personalizado configurado para receber todas as mensagens roteadas pelo MQTT foi excluído. O Event Grid descarta a mensagem MQTT destinada ao roteamento.
AuthenticationError A função Remetente de Dados da Grade de Eventos para o tópico personalizado configurado como o destino das mensagens roteadas MQTT foi excluída. O Event Grid descarta a mensagem MQTT destinada ao roteamento.
Muitas Solicitações O número de mensagens roteadas MQTT por segundo excede o limite de publicação do tópico personalizado. A Grade de Eventos tenta rotear novamente a mensagem MQTT.
Erro de Serviço Um erro inesperado do servidor por um motivo operacional. A Grade de Eventos tenta rotear novamente a mensagem MQTT.

Durante as repetições, a Grade de Eventos usa uma política de repetição de retirada exponencial para roteamento de mensagens MQTT. A Grade de Eventos repete a entrega usando a seguinte agenda com base no melhor esforço:

  • 10 segundos
  • 30 segundos
  • 1 minuto
  • 5 minutos
  • 10 minutos
  • 30 minutos
  • 1 hora
  • 3 horas
  • 6 horas
  • A cada 12 horas

Se a reentrega de uma mensagem MQTT roteada enfileirada para reentrega for bem-sucedida, o Event Grid tentará remover a mensagem da fila de novas tentativas em regime de melhor esforço, mas você ainda poderá receber mensagens duplicadas.