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


Краткое руководство. Маршрутизация пользовательских событий в очередь с помощью сетки событий и Azure CLI

Сетка событий Azure — это высокомасштабируемый и бессерверный брокер событий, который можно использовать для интеграции приложений с помощью событий. Служба "Сетка событий" предоставляет события для поддерживаемых обработчиков событий, а хранилище очередей Azure — одно из них.

В этом кратком руководстве вы используете Azure CLI для создания настраиваемого раздела Сетки событий и подписки хранилища очередей для этого раздела. Затем вы отправляете примеры событий в пользовательский раздел и убедитесь, что эти события доставляются в очередь.

Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.

Создание или изменение группы ресурсов

Разделы сетки событий — это ресурсы Azure, и они должны быть помещены в группу ресурсов Azure. Группа ресурсов Azure — это логическая коллекция, в которой выполняется развертывание и администрирование ресурсов Azure.

Создайте группу ресурсов с помощью команды az group create. В следующем примере создается группа ресурсов с именем gridResourceGroup в расположении именем westus2.

Выберите Open Cloud Shell, чтобы открыть Azure Cloud Shell на правой панели. Нажмите кнопку "Копировать ", чтобы скопировать команду, вставьте ее в Cloud Shell и нажмите клавишу ВВОД, чтобы выполнить команду.

az group create --name gridResourceGroup --location westus2

Включение поставщика ресурсов службы "Сетка событий"

  1. Если вы еще не использовали службу "Сетка событий" в подписке Azure, вам, возможно, потребуется зарегистрировать поставщик ресурсов этой службы. Выполните следующую команду для регистрации поставщика:

    az provider register --namespace Microsoft.EventGrid
    
  2. Регистрация может занять некоторое время. Чтобы проверить состояние, выполните следующую команду:

    az provider show --namespace Microsoft.EventGrid --query "registrationState"
    

    Когда состояние registrationState изменится на Registered, вы сможете продолжить работу.

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

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

Замените <TOPIC NAME> уникальным именем для вашего пользовательского раздела. Имя раздела сетки событий должно быть уникальным, так как запись системы доменных имен (DNS) представляет ее.

  1. Укажите имя раздела:

    topicname="<TOPIC NAME>"
    
  2. Выполните следующую команду, чтобы создать раздел:

    az eventgrid topic create --name $topicname -l westus2 -g gridResourceGroup
    

Создать очередь

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

  1. Укажите уникальное имя учетной записи хранения Azure:

    storagename="<STORAGE ACCOUNT NAME>"    
    
  2. Выполните следующие команды, чтобы создать учетную запись хранения и очередь (именованную eventqueue) в хранилище:

    queuename="eventqueue"
    
    az storage account create -n $storagename -g gridResourceGroup -l westus2 --sku Standard_LRS
    key="$(az storage account keys list -n $storagename --query "[0].{value:value}" --output tsv)"    
    az storage queue create --name $queuename --account-name $storagename --account-key $key
    

Создание подписки на события пользовательского раздела

Следующий пример подписывается на созданный пользовательский раздел и передает идентификатор ресурса очереди для конечной точки. С помощью Azure CLI идентификатор очереди передается в качестве конечной точки. Конечная точка находится в следующем формате:

/subscriptions/<AZURE SUBSCRIPTION ID>/resourcegroups/<RESOURCE GROUP NAME>/providers/Microsoft.Storage/storageAccounts/<STORAGE ACCOUNT NAME>/queueservices/default/queues/<QUEUE NAME>

Приведенный ниже скрипт получает идентификатор ресурса учетной записи хранения для очереди. Он создает идентификатор очереди и подписывается на раздел "Сетка событий". В нем также задается тип storagequeue для конечной точки и используется ее идентификатор.

Перед выполнением команды замените заполнитель на дату окончания срока действия (<yyyy-mm-dd>) фактическим значением года, месяца и дня.

storageid=$(az storage account show --name $storagename --resource-group gridResourceGroup --query id --output tsv)
queueid="$storageid/queueservices/default/queues/$queuename"
topicid=$(az eventgrid topic show --name $topicname -g gridResourceGroup --query id --output tsv)

az eventgrid event-subscription create \
  --source-resource-id $topicid \
  --name mystoragequeuesubscription \
  --endpoint-type storagequeue \
  --endpoint $queueid \
  --expiration-date "<yyyy-mm-dd>"

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

Если вы используете REST API для создания подписки, передайте идентификатор учетной записи хранения и имя очереди в качестве отдельного параметра:

"destination": {
  "endpointType": "storagequeue",
  "properties": {
    "queueName":"eventqueue",
    "resourceId": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-name>"
  }
  ...

Отправка события в пользовательский раздел

Активируйте событие, чтобы увидеть, как сетка событий распространяет сообщение в конечную точку. Сначала получите URL-адрес и ключ для пользовательского раздела:

endpoint=$(az eventgrid topic show --name $topicname -g gridResourceGroup --query "endpoint" --output tsv)
key=$(az eventgrid topic key list --name $topicname -g gridResourceGroup --query "key1" --output tsv)

Для простоты в этой статье вы используете примеры данных событий для отправки в пользовательский раздел. Как правило, приложение или служба Azure отправляют данные о событии.

Средство cURL отправляет HTTP-запросы. В этой статье вы используете cURL для отправки события в пользовательский раздел. В следующем примере три события отправляются в раздел "Сетка событий".

for i in 1 2 3
do
   event='[ {"id": "'"$RANDOM"'", "eventType": "recordInserted", "subject": "myapp/vehicles/motorcycles", "eventTime": "'`date +%Y-%m-%dT%H:%M:%S%z`'", "data":{ "make": "Ducati", "model": "Monster"},"dataVersion": "1.0"} ]'
   curl -X POST -H "aeg-sas-key: $key" -d "$event" $endpoint
done

Перейдите в очередь в портал Azure и обратите внимание, что сетка событий отправила эти три события в очередь.

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

Очистка ресурсов

Если вы планируете продолжить работу с этим событием, не убирайте ресурсы, созданные в этой статье. В противном случае используйте следующую команду, чтобы удалить ресурсы:

az group delete --name gridResourceGroup

Теперь, когда вы знаете, как создавать темы и подписки на события, ознакомьтесь с дополнительными сведениями о сетке событий, которые могут помочь вам:

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