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

В этой статье приведены краткие сведения о доставке по запросу с помощью curl команды оболочки Bash для публикации, получения и подтверждения событий. Ресурсы сетки событий создаются с помощью команд CLI. Эта статья подходит для быстрого тестирования функциональных возможностей доставки по запросу. Пример кода с помощью пакетов SDK плоскости данных см. в примерах .NET или Java. Для Java мы предоставляем пример кода в двух статьях: публикация событий и краткие руководства по получению событий. Дополнительные сведения о модели доставки по запросу см. в разделах о концепциях и статьях о доставке по запросу.

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

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

  • Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см . в кратком руководстве по Bash в Azure Cloud Shell.

  • Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.

    • Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.

    • Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.

    • Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.

  • Для работы с этой статьей требуется Azure CLI версии 2.0.70 или более поздней. Если вы используете Azure Cloud Shell, последняя версия уже установлена.

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

Создайте группу ресурсов Azure с помощью команды az group create. Эта группа ресурсов используется для хранения всех ресурсов, созданных в этой статье.

Ниже приведены общие действия по использованию Cloud Shell для выполнения команд.

  • Выберите Open Cloud Shell, чтобы увидеть окно Azure Cloud Shell на правой панели.
  • Скопируйте команду и вставьте ее в окно Azure Cloud Shell.
  • Нажмите клавишу ВВОД, чтобы выполнить эту команду.
  1. Объявите переменную для хранения имени группы ресурсов Azure. Укажите имя группы ресурсов, заменив <your-resource-group-name> нужное значение.

    resource_group="<your-resource-group-name>"
    
  2. Создать группу ресурсов. Измените расположение по мере соответствия.

    az group create --name $resource_group --location eastus
    

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

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

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

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

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

Создание пространства имен

Пространство имен Сетки событий предоставляет определяемую пользователем конечную точку, в которую вы публикуете события. В следующем примере создается пространство имен в группе ресурсов с помощью Bash в Azure Cloud Shell. Имя пространства имен должно быть уникальным, так как это часть записи системы доменных имен (DNS). Имя пространства имен должно соответствовать следующим правилам:

  • Он должен находиться в диапазоне от 3 до 50 символов.
  • Он должен быть региональным уникальным.
  • Допустимы только символы a-z, A-Z, 0-9 и -
  • Он не должен начинаться с зарезервированных префиксов ключевого слова, таких как Microsoft, System или EventGrid.
  1. Объявите переменную для хранения имени пространства имен Сетки событий. Укажите имя пространства имен, заменив <your-namespace-name> нужное значение.

    namespace="<your-namespace-name>"
    
  2. Создайте пространство имен. Возможно, потребуется изменить расположение, в котором оно развернуто.

    az eventgrid namespace create -g $resource_group -n $namespace -l eastus
    

Создание раздела пространства имен

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

  1. Объявите переменную для хранения имени раздела пространства имен. Укажите имя раздела пространства имен, заменив <your-topic-name> нужное значение.

    topic="<your-topic-name>"
    
  2. Создайте раздел пространства имен:

    az eventgrid namespace topic create -g $resource_group -n $topic --namespace-name $namespace 
    

Создание подписки на событие

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

  1. Объявите переменную для хранения имени подписки на событие в разделе пространства имен. Укажите имя подписки на события, заменив <your-event-subscription-name> вам нужное значение.

    event_subscription="<your-event-subscription-name>"
    
  2. Создайте подписку на событие в разделе пространства имен:

    az eventgrid namespace topic event-subscription create -g $resource_group --topic-name $topic -n $event_subscription --namespace-name $namespace --delivery-configuration "{deliveryMode:Queue,queue:{receiveLockDurationInSeconds:300,maxDeliveryCount:4,eventTimeToLive:P1D}}"
    

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

Теперь отправьте пример события в раздел пространства имен, выполнив действия, описанные в этом разделе.

Вывод списка ключей доступа к пространству имен

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

    namespace_resource_id=$(az eventgrid namespace show -g $resource_group -n $namespace --query "id" --output tsv)
    
  2. Получите первый ключ из пространства имен:

    key=$(az eventgrid namespace list-key -g $resource_group --namespace-name $namespace --query "key1" --output tsv)
    

Публикация события

  1. Получите имя узла пространства имен. Он используется для создания конечной точки пространства имен HTTP, в которую отправляются события. Следующие операции были впервые доступны в версии 2023-06-01-previewAPI.

    publish_operation_uri="https://"$(az eventgrid namespace show -g $resource_group -n $namespace --query "topicsConfiguration.hostname" --output tsv)"/topics/"$topic:publish?api-version=2023-06-01-preview
    
  2. Создайте пример события, соответствующего требованиям CloudEvents :

    event=' { "specversion": "1.0", "id": "'"$RANDOM"'", "type": "com.yourcompany.order.ordercreatedV2", "source" : "/mycontext", "subject": "orders/O-234595", "time": "'`date +%Y-%m-%dT%H:%M:%SZ`'", "datacontenttype" : "application/json", "data":{ "orderId": "O-234595", "url": "https://yourcompany.com/orders/o-234595"}} '
    

    Элемент data — полезные данные события. Любое значение JSON с правильным форматом может быть в этом поле. Дополнительные сведения о свойствах (также известных как атрибуты контекста), которые могут идти в событии, см . в спецификациях CloudEvents .

  3. Используйте CURL для отправки события в раздел. CURL — это служебная программа, которая отправляет HTTP-запросы.

    curl -X POST -H "Content-Type: application/cloudevents+json" -H "Authorization:SharedAccessKey $key" -d "$event" $publish_operation_uri
    

Получение события

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

  1. Создайте такую конечную точку, выполнив следующую команду:

    receive_operation_uri="https://"$(az eventgrid namespace show -g $resource_group -n $namespace --query "topicsConfiguration.hostname" --output tsv)"/topics/"$topic/eventsubscriptions/$event_subscription:receive?api-version=2023-06-01-preview
    
  2. Отправьте запрос на использование события:

    curl -X POST -H "Content-Type: application/json" -H "Authorization:SharedAccessKey $key" $receive_operation_uri
    

Подтверждение события

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

  1. На предыдущем шаге необходимо получить ответ, содержащий brokerProperties объект со свойством lockToken . Скопируйте значение маркера блокировки и задайте его в переменной среды:

    lockToken="<paste-the-lock-token-here>"
    
  2. Теперь создайте полезные данные операции подтверждения, которая указывает маркер блокировки для события, которое требуется подтвердить.

    acknowledge_request_payload=' { "lockTokens": ["'$lockToken'"]} '
    
  3. Запустите сборку строки с универсальным кодом ресурса (URI) операции подтверждения:

    acknowledge_operation_uri="https://"$(az eventgrid namespace show -g $resource_group -n $namespace --query "topicsConfiguration.hostname" --output tsv)"/topics/"$topic/eventsubscriptions/$event_subscription:acknowledge?api-version=2023-06-01-preview
    
  4. Наконец, отправьте запрос на подтверждение полученного события:

    curl -X POST -H "Content-Type: application/json" -H "Authorization:SharedAccessKey $key" -d "$acknowledge_request_payload" $acknowledge_operation_uri
    

    Если операция подтверждения выполняется до истечения срока действия маркера блокировки (300 секунд, заданных при создании подписки на событие), вы увидите ответ, как показано в следующем примере:

    {"succeededLockTokens":["CiYKJDQ4NjY5MDEyLTk1OTAtNDdENS1BODdCLUYyMDczNTYxNjcyMxISChDZae43pMpE8J8ovYMSQBZS"],"failedLockTokens":[]}
    

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

Дополнительные сведения о модели доставки по запросу см. в обзоре доставки по запросу.