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.
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.
- Tópico personalizado como um destino de roteamento:
- Crie um tópico personalizado da Grade de Eventos para onde todas as mensagens MQTT são roteadas. Esse tópico precisa atender aos requisitos de tópico personalizado da Grade de Eventos para roteamento
- Crie uma assinatura de evento da Grade de Eventos para rotear essas mensagens para um dos serviços do Azure com suporte ou um ponto de extremidade personalizado.
- Defina a configuração de roteamento referindo-se ao tópico que você criou na primeira etapa.
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.
- Para tópicos personalizados, a lista mostra apenas os tópicos que atendem aos requisitos de tópico personalizado da Grade de Eventos para roteamento
- 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.
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:
- Tutorial: Encaminhar mensagens MQTT para Hubs de Eventos do Azure usando tópicos de namespace
- Tutorial: Encaminhar mensagens MQTT para Azure Functions usando tópicos personalizados