Публикация в разделах пространства имен и использование событий в Сетка событий 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.
- Нажмите клавишу ВВОД, чтобы выполнить эту команду.
Объявите переменную для хранения имени группы ресурсов Azure. Укажите имя группы ресурсов, заменив
<your-resource-group-name>
нужное значение.resource_group="<your-resource-group-name>"
Создать группу ресурсов. Измените расположение по мере соответствия.
az group create --name $resource_group --location eastus
Включение поставщика ресурсов службы "Сетка событий"
Если вы еще не использовали службу "Сетка событий" в подписке Azure, вам, возможно, потребуется зарегистрировать поставщик ресурсов этой службы. Выполните следующую команду для регистрации поставщика:
az provider register --namespace Microsoft.EventGrid
Регистрация может занять некоторое время. Чтобы проверка состояние, выполните следующую команду:
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
.
Объявите переменную для хранения имени пространства имен Сетки событий. Укажите имя пространства имен, заменив
<your-namespace-name>
нужное значение.namespace="<your-namespace-name>"
Создайте пространство имен. Возможно, потребуется изменить расположение, в котором оно развернуто.
az eventgrid namespace create -g $resource_group -n $namespace -l eastus
Создание раздела пространства имен
Создайте раздел, который используется для хранения всех событий, опубликованных в конечной точке пространства имен.
Объявите переменную для хранения имени раздела пространства имен. Укажите имя раздела пространства имен, заменив
<your-topic-name>
нужное значение.topic="<your-topic-name>"
Создайте раздел пространства имен:
az eventgrid namespace topic create -g $resource_group -n $topic --namespace-name $namespace
Создание подписки на событие
Создайте подписку на событие, задающую режим доставки в очередь, которая поддерживает доставку по запросу. Дополнительные сведения обо всех параметрах конфигурации см. в последнем REST API уровня управления сеткой событий.
Объявите переменную для хранения имени подписки на событие в разделе пространства имен. Укажите имя подписки на события, заменив
<your-event-subscription-name>
вам нужное значение.event_subscription="<your-event-subscription-name>"
Создайте подписку на событие в разделе пространства имен:
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}}"
Отправка событий в раздел
Теперь отправьте пример события в раздел пространства имен, выполнив действия, описанные в этом разделе.
Вывод списка ключей доступа к пространству имен
Получите ключи доступа, связанные с созданным пространством имен. Вы используете один из них для проверки подлинности при публикации событий. Чтобы вывести список ключей, сначала потребуется полный идентификатор ресурса пространства имен. Получите его, выполнив следующую команду:
namespace_resource_id=$(az eventgrid namespace show -g $resource_group -n $namespace --query "id" --output tsv)
Получите первый ключ из пространства имен:
key=$(az eventgrid namespace list-key -g $resource_group --namespace-name $namespace --query "key1" --output tsv)
Публикация события
Получите имя узла пространства имен. Он используется для создания конечной точки пространства имен HTTP, в которую отправляются события. Следующие операции были впервые доступны в версии
2023-06-01-preview
API.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
Создайте пример события, соответствующего требованиям 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 .Используйте CURL для отправки события в раздел. CURL — это служебная программа, которая отправляет HTTP-запросы.
curl -X POST -H "Content-Type: application/cloudevents+json" -H "Authorization:SharedAccessKey $key" -d "$event" $publish_operation_uri
Получение события
Вы получаете события из сетки событий с помощью конечной точки, которая ссылается на подписку на события.
Создайте такую конечную точку, выполнив следующую команду:
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
Отправьте запрос на использование события:
curl -X POST -H "Content-Type: application/json" -H "Authorization:SharedAccessKey $key" $receive_operation_uri
Подтверждение события
После получения события передайте это событие в приложение для обработки. После успешной обработки события вам больше не нужно, чтобы это событие было в подписке на событие. Чтобы указать сетке событий удалить событие, необходимо подтвердить его с помощью его маркера блокировки, который вы получили в ответе операции получения.
На предыдущем шаге необходимо получить ответ, содержащий
brokerProperties
объект со свойствомlockToken
. Скопируйте значение маркера блокировки и задайте его в переменной среды:lockToken="<paste-the-lock-token-here>"
Теперь создайте полезные данные операции подтверждения, которая указывает маркер блокировки для события, которое требуется подтвердить.
acknowledge_request_payload=' { "lockTokens": ["'$lockToken'"]} '
Запустите сборку строки с универсальным кодом ресурса (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
Наконец, отправьте запрос на подтверждение полученного события:
curl -X POST -H "Content-Type: application/json" -H "Authorization:SharedAccessKey $key" -d "$acknowledge_request_payload" $acknowledge_operation_uri
Если операция подтверждения выполняется до истечения срока действия маркера блокировки (300 секунд, заданных при создании подписки на событие), вы увидите ответ, как показано в следующем примере:
{"succeededLockTokens":["CiYKJDQ4NjY5MDEyLTk1OTAtNDdENS1BODdCLUYyMDczNTYxNjcyMxISChDZae43pMpE8J8ovYMSQBZS"],"failedLockTokens":[]}
Следующие шаги
Дополнительные сведения о модели доставки по запросу см. в обзоре доставки по запросу.