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


Краткое руководство: Публикация в темах пространства имен и подписка на события в Azure Event Grid

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

Для примеров кода, использующих SDK для работы с данными, см. следующие ресурсы:

Дополнительные сведения о модели доставки по запросу см. в статьях Концепции пространства имен Azure Event Grid и Доставка по запросу с помощью HTTP.

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

Предпосылки

  • Для работы с этой статьей требуется 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. Создайте группу ресурсов. Вы можете изменить расположение на любое из доступных расположений в Azure.

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

Включить поставщик ресурсов Event Grid

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

    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 --resource-group $resource_group --name $namespace --location eastus
    

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

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

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

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

    az eventgrid namespace topic create --resource-group $resource_group --name $topic --namespace-name $namespace
    

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

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

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

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

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

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

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

Перечислить ключи доступа пространства имен

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

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

    key=$(az eventgrid namespace list-key --resource-group $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 --resource-group $resource_group --name $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
    

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

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

  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":[]}
    

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

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