Поделиться через


Руководство. Использование разделов пространства имен для маршрутизации сообщений MQTT в Центры событий Azure (Azure CLI)

В этом руководстве описано, как использовать раздел пространства имен для маршрутизации данных из клиентов MQTT в Центры событий Azure. Ниже приведены основные действия.

Необходимые компоненты

  • Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.
  • Если вы не знакомы с Сеткой событий, ознакомьтесь с обзором сетки событий перед началом работы с этим руководством.
  • Зарегистрируйте поставщик ресурсов сетки событий в соответствии с инструкциями, описанными в разделе "Регистрация поставщика ресурсов сетки событий".
  • Убедитесь, что порт 8883 открыт в брандмауэре. В этом руководстве используется протокол MQTT, который взаимодействует через порт 8883. Этот порт может быть заблокирован в некоторых корпоративных и образовательных сетевых средах.

Запуск Cloud Shell

  1. Войдите на портал Azure.

  2. Выберите ссылку, чтобы запустить Cloud Shell.

  3. Переключитесь на Bash.

    Снимок экрана: портал Azure с выбранным окном Cloud Shell и выбранным Bash.

Создание пространства имен и раздела сетки событий

Чтобы создать пространство имен сетки событий и раздел в пространстве имен, скопируйте следующий скрипт в редактор, замените заполнители фактическими значениями и выполните команды.

Заполнитель Комментарии
RESOURCEGROUPNAME Укажите имя создаваемой группы ресурсов.
EVENTGRIDNAMESPACENAME Укажите имя пространства имен Сетки событий.
REGION Укажите расположение, в котором нужно создать ресурсы.
NAMESPACETOPICNAME Укажите имя раздела пространства имен.
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

Создание пространства имен Центров событий и концентратора событий

Чтобы создать пространство имен Центров событий и концентратор событий в пространстве имен, замените заполнители фактическими значениями и выполните следующие команды. Этот концентратор событий используется в качестве обработчика событий в подписке на события, созданную в этом руководстве.

Заполнитель Комментарии
EVENTHUBSNAMESPACENAME Укажите имя создаваемого пространства имен Центров событий.
EVENTHUBNAME Укажите имя экземпляра Центров событий (концентратор событий), который необходимо создать в пространстве имен Центров событий.
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

Предоставление пространству имен Сетки событий доступ к отправке событий в концентратор событий

Выполните следующую команду, чтобы добавить субъект-службу пространства имен Сетки событий в роль отправителя данных Центры событий Azure в пространстве имен Центров событий. Он позволяет пространству имен и ресурсам сетки событий отправлять события в концентратор событий в пространстве имен Центров событий.

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

Создание подписки на события с центрами событий в качестве конечной точки

Чтобы создать подписку на события для созданного ранее раздела пространства имен, замените заполнители фактическими значениями и выполните следующие команды. Эта подписка настроена для использования концентратора событий в качестве обработчика событий.

Заполнитель Комментарии
EVENTSUBSCRIPTIONNAME Укажите имя подписки на события для раздела пространства имен.
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\"}}}}}}"

Настройка маршрутизации в пространстве имен Сетки событий

Выполните следующие команды, чтобы включить маршрутизацию в пространстве имен для маршрутизации сообщений или событий в созданный ранее раздел пространства имен. Подписка на события в этом разделе пространства имен перенаправит эти события в концентратор событий, настроенный в качестве обработчика событий.

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}"

Клиентский клиент, пространство разделов и привязки разрешений

Теперь создайте клиент для отправки нескольких сообщений для тестирования. На этом шаге вы создадите клиент, пространство тем с разделом, а также привязки издателя и подписчика.

Подробные инструкции см . в кратком руководстве. Публикация и подписка на сообщения MQTT в пространстве имен Сетки событий с помощью Azure CLI.

Заполнитель Комментарии
CLIENTNAME Укажите имя клиента, отправляющего несколько тестовых сообщений.
CERTIFICATETHUMBPRINT Отпечаток сертификата клиента. В приведенном выше кратком руководстве приведены инструкции по созданию сертификата и извлечению отпечатка. Используйте тот же отпечаток в средстве MQTTX для отправки тестовых сообщений.
TOPICSPACENAME Укажите имя создаваемого пространства тем.
PUBLSHERBINDINGNAME Укажите имя привязки издателя.
SUBSCRIBERBINDINGNAME Укажите имя привязки подписчика.
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

Отправка сообщений с помощью MQTTX

Используйте MQTTX для отправки нескольких тестовых сообщений. Пошаговые инструкции см. в кратком руководстве по публикации и подписке на раздел MQTT.

Убедитесь, что концентратор событий получил эти сообщения на странице обзора пространства имен Центров событий.

Снимок экрана: страница обзора концентратора событий с числом входящих сообщений.

Просмотр перенаправленных сообщений MQTT в Центрах событий с помощью запроса Stream Analytics

Перейдите к экземпляру Центров событий (концентратору событий) в подписке на события в портал Azure. Обработка данных из концентратора событий с помощью Stream Analytics. Дополнительные сведения см. в разделе "Обработка данных из Центры событий Azure с помощью Stream Analytics " Центры событий Azure | Microsoft Learn. В запросе отображаются сообщения MQTT.

Снимок экрана: данные сообщений MQTT в Центрах событий с помощью средства запроса Stream Analytics.

Следующие шаги

Примеры кода см. в этом репозитории GitHub.