Partilhar via


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

  1. Inicie sessão 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.

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.

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

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.

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

Próximos passos

Para exemplos de código, vá para este repositório GitHub.