Compartilhar via


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

  1. Faça logon no Portal do Azure.

  2. Selecione o link para iniciar o Cloud Shell.

  3. Mude para Bash.

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

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.

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

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.

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 amostras de código, acesse esse repositório do GitHub.