Tutorial: Usar tópicos de namespace para rotear mensagens MQTT para Hubs de Eventos do Azure (CLI do Azure)
Neste tutorial, você aprenderá a usar um tópico de namespace para rotear dados de clientes MQTT para Hubs de Eventos do Azure. Aqui estão as etapas de alto nível:
Pré-requisitos
- Se você não tiver uma assinatura do Azure, crie uma conta gratuita do Azure antes de começar.
- Se você é novo na Grade de Eventos, leia a visão geral da Grade de Eventos antes de iniciar este tutorial.
- Registre o provedor de recursos da Grade de Eventos de acordo com as etapas em Registrar o provedor de recursos da Grade de Eventos.
- Verifique se a porta 8883 está aberta no firewall. O exemplo neste tutorial usa o protocolo MQTT, que se comunica pela porta 8883. Essa porta pode estar bloqueada em alguns ambientes de rede corporativa e educacional.
Iniciar Cloud Shell
Inicie sessão no Portal do Azure.
Selecione o link para iniciar o Cloud Shell.
Mude para Bash.
Criar um namespace e um tópico da Grade de Eventos
Para criar um namespace de Grade de Eventos e um tópico no namespace, copie o script a seguir para um editor, substitua espaços reservados por valores reais e execute os comandos.
Marcador de Posição | Comentários |
---|---|
RESOURCEGROUPNAME |
Especifique um nome para o grupo de recursos a ser criado. |
EVENTGRIDNAMESPACENAME |
Especifique o nome para o namespace Event Grid. |
REGION |
Especifique o local no qual você deseja criar os recursos. |
NAMESPACETOPICNAME |
Especifique um nome para o tópico de namespace. |
rgName="RESOURCEGROUPNAME"
nsName="EVENTGRIDNAMESPACENAME"
location="REGION"
nsTopicName="NAMESPACETOPICNAME"
az group create -n $rgName -l $location
az eventgrid namespace create -g $rgName -n $nsName -l $location --topic-spaces-configuration "{state:Enabled}" --identity "{type:SystemAssigned}"
az eventgrid namespace topic create -g $rgName --name $nsTopicName --namespace-name $nsName
Criar um espaço de nomes de Hubs de Eventos e um hub de eventos
Para criar um namespace de Hubs de Eventos e um hub de eventos no namespace, substitua espaços reservados por valores reais e execute os seguintes comandos. Esse hub de eventos é usado como um manipulador de eventos na assinatura de eventos criada neste tutorial.
Marcador de Posição | Comentários |
---|---|
EVENTHUBSNAMESPACENAME |
Especifique um nome para o namespace de Hubs de Eventos a ser criado. |
EVENTHUBNAME |
Especifique o nome da instância dos Hubs de Eventos (hub de eventos) a ser criada no namespace dos Hubs de Eventos. |
ehubNsName="EVENTHUBSNAMESPACENAME`"
ehubName="EVENTHUBNAME"
az eventhubs namespace create --resource-group $rgName --name $ehubNsName
az eventhubs eventhub create --resource-group $rgName --namespace-name $ehubNsName --name $ehubName
Dê ao namespace Event Grid o acesso para enviar eventos para o hub de eventos
Execute o comando a seguir para adicionar a entidade de serviço do namespace Grade de Eventos à função Remetente de Dados dos Hubs de Eventos do Azure no namespace Hubs de Eventos. Ele permite que o namespace Grade de Eventos e os recursos nele contidos enviem eventos para o hub de eventos no namespace Hubs de Eventos.
egNamespaceServicePrincipalObjectID=$(az ad sp list --display-name $nsName --query [].id -o tsv)
namespaceresourceid=$(az eventhubs namespace show -n $ehubNsName -g $rgName --query "{I:id}" -o tsv)
az role assignment create --assignee $egNamespaceServicePrincipalObjectID --role "Azure Event Hubs Data Sender" --scope $namespaceresourceid
Criar uma assinatura de evento com Hubs de Eventos como ponto de extremidade
Para criar uma assinatura de evento para o tópico de namespace criado anteriormente, substitua espaços reservados por valores reais e execute os comandos a seguir. Esta assinatura está configurada para usar o hub de eventos como manipulador de eventos.
Marcador de Posição | Comentários |
---|---|
EVENTSUBSCRIPTIONNAME |
Especifique um nome para a assinatura de evento para o tópico namespace. |
eventSubscriptionName="EVENTSUBSCRIPTIONNAME"
eventhubresourceid=$(az eventhubs eventhub show -n $ehubName --namespace-name $ehubNsName -g $rgName --query "{I:id}" -o tsv)
az resource create --api-version 2023-06-01-preview --resource-group $rgName --namespace Microsoft.EventGrid --resource-type eventsubscriptions --name $eventSubscriptionName --parent namespaces/$nsName/topics/$nsTopicName --location $location --properties "{\"deliveryConfiguration\":{\"deliveryMode\":\"Push\",\"push\":{\"maxDeliveryCount\":10,\"deliveryWithResourceIdentity\":{\"identity\":{\"type\":\"SystemAssigned\"},\"destination\":{\"endpointType\":\"EventHub\",\"properties\":{\"resourceId\":\"$eventhubresourceid\"}}}}}}"
Configurar o roteamento no namespace Grade de Eventos
Execute os comandos a seguir para habilitar o roteamento no namespace para rotear mensagens ou eventos para o tópico de namespace criado anteriormente. A assinatura de eventos nesse tópico de namespace encaminha esses eventos para o hub de eventos configurado como um manipulador de eventos.
routeTopicResourceId=$(az eventgrid namespace topic show -g $rgName --namespace-name $nsName -n $nsTopicName --query "{I:id}" -o tsv)
az eventgrid namespace create -g $rgName -n $nsName --topic-spaces-configuration "{state:Enabled,'routeTopicResourceId':$routeTopicResourceId}"
Cliente cliente, espaço de tópico e ligações de permissão
Agora, crie um cliente para enviar algumas mensagens para teste. Nesta etapa, você cria um cliente, um espaço de tópico com um tópico e associações de editor e assinante.
Para obter instruções detalhadas, consulte Guia de início rápido: publicar e assinar mensagens MQTT em um namespace de grade de eventos com a CLI do Azure.
Marcador de Posição | Comentários |
---|---|
CLIENTNAME |
Especifique um nome para o cliente que envia algumas mensagens de teste. |
CERTIFICATETHUMBPRINT |
Impressão digital do certificado do cliente. Consulte o guia de início rápido acima para obter instruções sobre como criar um certificado e extrair uma impressão digital. Use a mesma impressão digital na ferramenta MQTTX para enviar mensagens de teste. |
TOPICSPACENAME |
Especifique um nome para o espaço de tópico a ser criado. |
PUBLSHERBINDINGNAME |
Especifique um nome para a associação do editor. |
SUBSCRIBERBINDINGNAME |
Especifique um nome para a associação de assinante. |
clientName="CLIENTNAME"
clientAuthName="client1-authnID"
clientThumbprint="CERTIFICATETHUMBPRINT"
topicSpaceName="TOPICSPACENAME"
publisherBindingName="PUBLSHERBINDINGNAME"
subscriberBindingName="SUBSCRIBERBINDINGNAME"
az eventgrid namespace client create -g $rgName --namespace-name $nsName -n $clientName --authentication-name $clientAuthName --client-certificate-authentication "{validationScheme:ThumbprintMatch,allowed-thumbprints:[$clientThumbprint]}"
az eventgrid namespace topic-space create -g $rgName --namespace-name $nsName -n $topicSpaceName --topic-templates ['contosotopics/topic1']
az eventgrid namespace permission-binding create -g $rgName --namespace-name $nsName -n $publisherBindingName --client-group-name '$all' --permission publisher --topic-space-name $topicSpaceName
az eventgrid namespace permission-binding create -g $rgName --namespace-name $nsName -n $subscriberBindingName --client-group-name '$all' --permission subscriber --topic-space-name $topicSpaceName
Enviar mensagens usando MQTTX
Use MQTTX para enviar algumas mensagens de teste. Para obter instruções passo a passo, consulte o guia de início rápido: publicar e assinar um tópico MQTT.
Verifique se o hub de eventos recebeu essas mensagens na página Visão geral do namespace Hubs de Eventos.
Exibir mensagens MQTT roteadas em Hubs de Eventos usando uma consulta do Stream Analytics
Navegue até a instância dos Hubs de Eventos (hub de eventos) dentro da sua assinatura de evento no portal do Azure. Processe dados do seu hub de eventos usando o Stream Analytics. Para obter mais informações, consulte Processar dados de Hubs de Eventos do Azure usando o Stream Analytics - Hubs de Eventos do Azure | Microsoft Learn. Você pode ver as mensagens MQTT na consulta.
Próximos passos
Para exemplos de código, vá para este repositório GitHub.