Roteamento de mensagens MQTT na grade de eventos do Azure
A Grade de Eventos permite que você roteie suas mensagens MQTT para serviços do Azure ou webhooks para processamento posterior. Assim, você pode criar soluções de ponta a ponta usando seus dados de IoT para análise, armazenamento e visualizações de dados, entre outros casos de uso.
Como posso usar o recurso de roteamento?
Rotear as mensagens de seus clientes para um serviço do Azure ou seu ponto de extremidade personalizado permite maximizar os benefícios desses dados. A seguir estão alguns dos muitos casos de uso para aproveitar esse recurso:
- Análise de Dados: extraia e analise as mensagens encaminhadas dos seus clientes para otimizar a sua solução. Por exemplo, analise a telemetria de suas máquinas para prever quando agendar a manutenção antes que as falhas aconteçam para evitar atrasos e danos adicionais.
- Aplicativos sem servidor: acione uma função sem servidor com base nas mensagens roteadas de seus clientes. Por exemplo, quando um sensor de movimento deteta um movimento, envie uma notificação ao pessoal de segurança para resolvê-lo.
- Visualizações de dados: crie visualizações dos dados roteados de seus clientes para representar e entender facilmente os dados, bem como destacar tendências e valores atípicos.
Configuração de roteamento:
A configuração de roteamento permite que você envie todas as suas mensagens MQTT de seus clientes para um tópico de namespace de Grade de Eventos ou um tópico personalizado de Grade de Eventos. Quando 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 de namespace como um destino de roteamento:
- Crie um tópico de namespace Event Grid 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 fila para extrair as mensagens diretamente do tópico de namespace por meio de seu aplicativo.
- Defina a configuração de roteamento referente ao tópico que você criou na primeira etapa.
- Tópico personalizado como destino de roteamento:
- Crie um tópico personalizado da Grade de Eventos onde todas as mensagens MQTT são roteadas. Este 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 referente ao tópico que você criou na primeira etapa.
Nota
A desativação do 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 detalhado de quais cotas e limites são incluídos em cada recurso de Grade de Eventos, consulte Cotas e limites.
Ponto de comparação | Tópico Namespace | Tópico personalizado |
---|---|---|
Débito | Alta, até 40 MB/s (entrada) e 80 MB/s (saída) | Baixo, até 5 MB/s (entrada e saída) |
Entrega puxada | Sim | |
Envio por push para Hubs de Eventos | Sim | Sim |
Entrega por push para serviços do Azure (Funções, Webhooks, filas e tópicos do Service Bus, conexões híbridas de retransmissão e filas de armazenamento) | Sim | |
Retenção de mensagens | 7 dias | 1 dia |
Requisito de atribuição de função | Não é necessário, pois o broker MQTT e o tópico namespace estão sob o mesmo namespace | Necessário, pois o namespace que hospeda a funcionalidade do broker 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 Grade de Eventos usado para roteamento precisa atender aos seguintes requisitos:
- Ele precisa ser configurado para usar o Cloud Event Schema v1.0
- Ele precisa estar na mesma região que o 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, vá para o recurso de tópico Grade de Eventos criado.
- 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, em seguida, selecione Avançar.
- No separador "Membros", selecione +Selecionar membros e, em seguida, escreva o seu nome de utilizador do AD na caixa "Selecionar" apresentada (por exemplo, user@contoso.com).
- Selecione o seu nome de utilizador do AD e, em seguida, selecione "Rever + atribuir"
Configuração do portal do Azure
Use as seguintes etapas para configurar o roteamento:
- Vá para seu namespace no portal do Azure.
- Em Roteamento, marque Habilitar roteamento.
- Em Tipo de tópico, selecione Tópico de namespace ou Tópico personalizado
- Em tópico, selecione o tópico que você criou 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 tiver sido selecionado, a seção Identidade gerenciada para entrega será exibida. Selecione uma das seguintes opções para a identidade usada para autenticar o broker MQTT enquanto entrega 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 ao sistema: nesse caso, você precisa habilitar a identidade atribuída ao sistema no namespace como pré-requisito e atribuir a função "EventGrid Data Sender" à 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 pré-requisito e atribuir a função "EventGrid Data Sender" à 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.
- Selecione Aplicar.
Para obter instruções de configuração de enriquecimento, vá para 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", //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 de configuração de enriquecimento, vá para Configuração da CLI de enriquecimento.
Comportamento de roteamento de mensagens MQTT
Ao rotear mensagens MQTT para tópicos personalizados, o Event Grid fornece entrega durável enquanto tenta entregar cada mensagem pelo menos uma vez imediatamente. Se houver uma falha, a Grade de Eventos tentará novamente a entrega ou descartará a mensagem que deveria ser roteada. A Grade de Eventos não garante o pedido de entrega do evento, 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 MQTT foi excluído. | A Grade de Eventos descarta 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 descarta a mensagem MQTT que deveria ser roteada. |
TooManyRequests | O número de mensagens roteadas MQTT por segundo excede o limite de publicação para o tópico personalizado. | A Grade de Eventos tenta rotear novamente a mensagem MQTT. |
Erro de serviço | Um erro de servidor inesperado por um motivo operacional do servidor. | A Grade de Eventos tenta rotear novamente a mensagem MQTT. |
Durante as tentativas, a Grade de Eventos usa uma política de repetição de backoff exponencial para roteamento de mensagens MQTT. A Grade de Eventos tenta novamente a entrega no seguinte cronograma com base no melhor esforço:
- 10 segundos
- 30 segundos
- 1 minuto
- 5 minutos
- 10 minutos
- 30 minutos
- Uma hora
- 3 horas
- 6 horas
- A cada 12 horas
Se uma mensagem MQTT roteada que foi enfileirada para reentrega for bem-sucedida, a Grade de Eventos tentará remover a mensagem da fila de repetição com base no melhor esforço, mas duplicatas ainda poderão ser recebidas.
Passos seguintes:
Use os seguintes artigos para saber mais sobre roteamento:
Início rápido:
- Tutorial: Encaminhar mensagens MQTT para Hubs de Eventos do Azure usando tópicos de namespace
- Tutorial: Encaminhar mensagens MQTT para o Azure Functions usando tópicos personalizados