Tutorial: Usar tópicos de namespace para encaminhar mensagens MQTT para Hubs de Eventos do Azure (CLI do Azure)
Neste tutorial, você aprenderá a usar um tópico de namespace para encaminhar dados de clientes MQTT para Hubs de Eventos do Azure. Aqui estão as etapas de alto nível:
Pré-requisitos
- Caso você não tenha uma assinatura do Azure, crie uma conta gratuita do Azure antes de começar.
- Se não estiver familiarizado com a Grade de Eventos, leia a visão geral da Grade de Eventos antes de começar o 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.
- Certifique-se de que a porta 8883 esteja aberta no seu firewall. A amostra deste tutorial usa o protocolo MQTT, que se comunica pela porta 8883. Essa porta pode ser bloqueada em alguns ambientes de rede corporativa e educacional.
Iniciar o Cloud Shell
Faça logon no Portal do Azure.
Selecione o link para iniciar o Cloud Shell.
Mude para Bash.
Crie um namespace e um tópico da Grade de Eventos
Para criar um namespace e um tópico da Grade de Eventos no namespace, copie o script a seguir para um editor, substitua os espaços reservados por valores reais e execute os comandos.
Espaço reservado | Comentários |
---|---|
RESOURCEGROUPNAME |
Especifique um nome para o grupo de recursos a ser criado. |
EVENTGRIDNAMESPACENAME |
Especifique o nome do namespace da Grade de Eventos. |
REGION |
Especifique o local no qual você quer criar os recursos. |
NAMESPACETOPICNAME |
Especifique um nome para o tópico do 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 namespace 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 os espaços reservados por valores reais e execute os comandos a seguir. Esse hub de eventos é usado como um manipulador de eventos na assinatura de eventos que você vai criar neste tutorial.
Espaço reservado | Comentários |
---|---|
EVENTHUBSNAMESPACENAME |
Especifique um nome para o namespace da plataforma Hubs de Eventos a ser criada. |
EVENTHUBNAME |
Especifique o nome da instância de Hubs de Eventos (um 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
Conceda ao namespace da Grade de Eventos o acesso para enviar eventos para o hub de eventos
Execute o comando a seguir para adicionar a entidade de serviço do namespace da Grade de Eventos à função de Remetente de Dados de Hubs de Eventos do Azure no namespace de Hubs de Eventos. O comando permite que o namespace e os respectivos recursos da Grade de Eventos enviem eventos para o hub de eventos no namespace de 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 eventos tendo Hubs de Eventos como ponto de extremidade
Para criar uma assinatura de eventos para o tópico de namespace que você criou anteriormente, substitua os espaços reservados por valores reais e execute os comandos a seguir. Essa assinatura é configurada para usar o hub de eventos como o manipulador de eventos.
Espaço reservado | Comentários |
---|---|
EVENTSUBSCRIPTIONNAME |
Especifique um nome para a assinatura de eventos para o tópico do 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 da Grade de Eventos
Execute os comandos a seguir para habilitar o roteamento no namespace a encaminhar 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, espaço de tópico e vinculações de permissão de um cliente
Agora, crie um cliente para enviar algumas mensagens de teste. Nessa etapa, você vai criar um cliente, um espaço de tópico com um tópico e vinculações de fornecedor e assinante.
Para obter instruções detalhadas, confira Início Rápido: Publicar e assinar mensagens MQTT em um namespace da Grade de Eventos com a CLI do Azure.
Espaço reservado | Comentários |
---|---|
CLIENTNAME |
Especifique um nome para o cliente que irá enviar algumas mensagens de teste. |
CERTIFICATETHUMBPRINT |
Impressão digital do certificado do cliente. Consulte o início rápido acima para obter instruções para criar um certificado e extrair uma impressão digital. Use a mesma impressão digital na ferramenta MQTTX para enviar as mensagens de teste. |
TOPICSPACENAME |
Especifique um nome para o espaço de tópico a ser criado. |
PUBLSHERBINDINGNAME |
Especifique um nome para a vinculação do fornecedor. |
SUBSCRIBERBINDINGNAME |
Especifique um nome para a vinculação do 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 o MQTTX para enviar algumas mensagens de teste. Para obter instruções passo a passo, confira o início rápido: Publicar e assinar um tópico de MQTT.
Certifique-se de que o hub de eventos recebeu essas mensagens na página Visão geral do seu namespace de Hubs de Eventos.
Ver as mensagens MQTT encaminhadas nos Hubs de Eventos usando uma consulta do Stream Analytics
Navegue até a instância de Hubs de Eventos (um hub de eventos) em sua assinatura de eventos no portal do Azure. Processe os dados do seu hub de eventos usando o Stream Analytics. Para obter mais informações, confira Processar dados da plataforma 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óximas etapas
Para obter amostras de código, acesse esse repositório do GitHub.