Compartilhar via


Tutorial: Usar tópicos de namespace para rotear mensagens MQTT para a CLI do Azure (Hubs de Eventos do Azure)

Neste tutorial, você aprenderá a usar um tópico de namespace para rotear dados de clientes MQTT para Os Hubs de Eventos do Azure. Estas sã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 você não estiver familiarizado com a 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 ser bloqueada em alguns ambientes de rede corporativa e educacional.

Iniciar o Cloud Shell

  1. Faça logon no Portal do Azure.

  2. Selecione o link para iniciar o Cloud Shell.

  3. Alterne para Bash.

    Captura de tela que mostra o portal do Azure com o Cloud Shell aberto e o Bash selecionado.

Criar um namespace e um tópico do Event Grid

Para criar um namespace da Grade de Eventos e um tópico no namespace, copie o script a seguir para um editor, substitua os espaços reservados por valores reais e execute os comandos.

Placeholder Comments
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ê deseja 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 dos Hubs de Eventos e um hub de eventos

Para criar um namespace do Event Hubs e um hub de eventos dentro deste 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 evento que você cria neste tutorial.

Placeholder Comments
EVENTHUBSNAMESPACENAME Especifique um nome para o namespace dos 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 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 evento com o Event Hubs como o endpoint

Para criar uma assinatura de evento para o tópico de namespace que você criou anteriormente, substitua os espaços reservados por valores reais e execute os comandos a seguir. Esta assinatura é configurada para usar o hub de eventos como o manipulador de eventos.

Placeholder Comments
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 para rotear mensagens ou eventos para o tópico de namespace criado anteriormente. A assinatura de evento 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 para teste. Nesta etapa, você criará 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 Início Rápido: Publicar e assinar mensagens MQTT em um namespace da Grade de Eventos com a CLI do Azure.

Placeholder Comments
CLIENTNAME Especifique um nome para o cliente que envia 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 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, consulte o 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 dos Hubs de Eventos.

Captura de tela que mostra a página Visão geral do hub de eventos com contagem de mensagens de entrada.

Exibir mensagens MQTT roteadas nos Hubs de Eventos usando uma consulta do Stream Analytics

Navegue até a instância dos Hubs de Eventos (hub de eventos) em sua assinatura de evento no portal do Azure. Processe dados do hub de eventos usando o Stream Analytics. Para obter mais informações, consulte Processar dados dos Hubs de Eventos do Azure usando o Stream Analytics – Hubs de Eventos do Azure | Microsoft Learn. Você pode ver as mensagens MQTT na consulta.

Captura de tela que mostra os dados de mensagens MQTT nos Hubs de Eventos usando a ferramenta de consulta do Stream Analytics.

Próximas etapas

Para obter exemplos de código, acesse este repositório do GitHub.