Roteamento de mensagens MQTT na Grade de Eventos do Azure

A Grade de Eventos permite rotear suas mensagens MQTT para webhooks ou serviços do Azure para processamento adicional. Dessa forma, você pode criar soluções de ponta a ponta usando seus dados de IoT para análise de dados, armazenamento e visualizações, entre outros casos de uso.

Diagram do roteamento de mensagem do MQTT

Como posso usar o recurso de roteamento?

Rotear as mensagens dos clientes para um serviço do Azure ou para seu ponto de extremidade personalizado permite maximizar os benefícios desses dados. Estes são alguns dos muitos casos de uso para aproveitar esse recurso:

  • Análise de dados: extraia e analise as mensagens roteadas dos clientes para otimizar sua solução. Por exemplo, analise a telemetria dos computadores para prever quando agendar a manutenção antes que as falhas ocorram para evitar atrasos e danos adicionais.
  • Aplicativos sem servidor: dispare uma função sem servidor com base nas mensagens roteadas dos clientes. Por exemplo, quando um sensor de movimento detectar um movimento, envie uma notificação à equipe de segurança para resolvê-la.
  • Visualizações de dados: crie visualizações dos dados roteados dos clientes para representar e entender os dados com facilidade, bem como realçar tendências e exceções.

Configuração de roteamento:

A configuração de roteamento permite enviar todas as suas mensagens MQTT de seus clientes para um tópico de namespace da Grade de Eventos ou um tópico personalizado da 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 um destino de roteamento:
    • Crie um tópico de namespace da Grade de Eventos para onde todas as mensagens MQTT são roteadas.
    • Crie uma assinatura de evento do tipo push para rotear essas mensagens para um dos serviços do Azure com suporte ou um webhooks personalizado ou uma assinatura de evento do tipo de fila para efetuar pull das mensagens diretamente do tópico do namespace por meio do aplicativo.
    • Defina a configuração de roteamento referindo-se 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 à rede pública no namespace fará 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 obter um detalhamento de quais cotas e limites estão incluídos em cada recurso da Grade de Eventos, confira Cotas e limites.

Ponto de comparação Tópico de namespace Tópico personalizado
Produtividade Alto, até 40 MB/s (entrada) e 80 MB/s (saída) Baixo, até 5 MB/s (entrada e saída)
Entrega pull Sim
Entrega por push nos Hubs de Eventos Sim Yes
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) Sim
Retenção de mensagem 7 dias 1 dia
Requisito de atribuição de função Não é necessário, pois o agente MQTT e o tópico do namespace estão no mesmo namespace Necessário, uma vez que o namespace que hospeda a funcionalidade do agente MQTT e o tópico personalizado são recursos diferentes

Requisitos de tópico personalizado da Grade de Eventos para roteamento

O tópico personalizado da Grade de Eventos usado para roteamento precisa atender aos seguintes requisitos:

  • Ele precisa ser definido para usar o Esquema de Eventos de Nuvem v1.0
  • Ele precisa estar na mesma região do namespace.
  • Você precisa atribuir a função "Remetente de Dados da Grade de Eventos" a si mesmo ou à identidade gerenciada selecionada no tópico personalizado da Grade de Eventos antes que a configuração de roteamento seja aplicada.
    • No portal, acesse o recurso de tópico criado da Grade de Eventos.
    • No item de menu "Controle de acesso (IAM)", selecione Adicionar uma atribuição de função.
    • Na guia "Função", selecione "Remetente de Dados da Grade de Eventos" e selecione Avançar.
    • Na guia "Membros", escolha +Selecionar membros e digite o nome de usuário do AD na caixa "Selecionar" exibida (por exemplo, user@contoso.com).
    • Escolha o nome de usuário do AD e selecione "Revisar + atribuir"

Configuração do portal do Azure

Execute as seguintes etapas para configurar o roteamento:

  • Acesse seu namespace no portal do Azure.
  • Em Roteamento, marque a opção Habilitar Roteamento.
  • No tipo de tópico, selecione Tópico de namespace ou Tópico personalizado
  • No tópico, selecione o tópico que você criou para onde todas as mensagens MQTT são roteadas.
  • Se o tópico personalizado foi selecionado, a seção Identidade Gerenciada para Entrega será exibida. Selecione uma das seguintes opções para a identidade usada para autenticar o agente MQTT ao fornecer as mensagens MQTT para o tópico personalizado:
    • Nenhum: neste caso, você precisa atribuir a função "Remetente de Dados da Grade de Eventos" a si mesmo no tópico personalizado.
    • Identidade atribuída pelo sistema: nesse caso, você precisa habilitar a identidade atribuída pelo sistema no namespace como um pré-requisito e atribuir a função "Remetente de Dados da Grade de Eventos" à identidade atribuída pelo sistema no tópico personalizado.
    • Identidade atribuída pelo usuário: nesse caso, você precisa habilitar a identidade atribuída pelo usuário no namespace como um pré-requisito e atribuir a função "Remetente de Dados da Grade de Eventos" à identidade selecionada no tópico personalizado.
      • Se a identidade atribuída pelo usuário tiver sido selecionada, uma lista suspensa será exibida para permitir que você selecione a identidade desejada.
  • Escolha Aplicar.

Captura de tela que mostra a configuração de roteamento por meio do portal.

Para obter instruções sobre a configuração de enriquecimento, acesse Configuração de enriquecimento no portal.

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", //Allowed values: None, SystemAssigned, UserAssigned
                "userAssignedIdentity": "/subscriptions/<Subscription ID>/resourceGroups/<Resource Group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<User-assigned identity>" //needed only if UserAssigned was the value of type
            },

	}
}

Para obter instruções sobre a configuração de enriquecimento, acesse Configuração de enriquecimento na CLI.

Comportamento de roteamento de mensagens MQTT

Ao rotear mensagens MQTT nos tópicos personalizados, a Grade de Eventos fornece entrega durável, pois tenta entregar as mensagens pelo menos uma vez imediatamente. Se houver uma falha, a Grade de Eventos repetirá a entrega ou removerá a mensagem que deveria ser roteada. A Grade de Eventos não garante a ordem de entrega de 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 de MQTT foi excluído. A Grade de Eventos remove a mensagem MQTT que deveria ser roteada.
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. A Grade de Eventos remove a mensagem MQTT que deveria ser roteada.
TooManyRequests 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.
ServiceError Um erro inesperado do servidor pelo motivo operacional de um servidor. 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 uma mensagem MQTT roteada que foi enfileirada para nova entrega tiver sido bem-sucedida, a Grade de Eventos fará o possível para tentar remover a mensagem da fila de repetição, mas ainda será possível receber duplicatas.

Próximas etapas:

Use os seguintes artigos para saber mais sobre roteamento:

Guia de Início Rápido:

Conceitos: