Руководство. Использование разделов пространства имен для маршрутизации сообщений MQTT в Центры событий Azure (Azure CLI)
В этом руководстве описано, как использовать раздел пространства имен для маршрутизации данных из клиентов MQTT в Центры событий Azure. Ниже приведены основные действия.
Необходимые компоненты
- Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.
- Если вы не знакомы с Сеткой событий, ознакомьтесь с обзором сетки событий перед началом работы с этим руководством.
- Зарегистрируйте поставщик ресурсов сетки событий в соответствии с инструкциями, описанными в разделе "Регистрация поставщика ресурсов сетки событий".
- Убедитесь, что порт 8883 открыт в брандмауэре. В этом руководстве используется протокол MQTT, который взаимодействует через порт 8883. Этот порт может быть заблокирован в некоторых корпоративных и образовательных сетевых средах.
Запуск Cloud Shell
Войдите на портал 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.
Следующие шаги
Примеры кода см. в этом репозитории GitHub.