Задание расположения для недоставленных сообщений и политики повтора

При создании подписки на события, можно настроить параметры доставки событий. В этой статье показано, как настроить расположение недоставленных сообщений и параметры повторных попыток. Сведения об этих возможностях см. в разделе Доставка и повторные попытки доставки сообщений сетки событий.

Примечание

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

Установка размещения недоставленных сообщений

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

Примечание

  • Перед запуском команд из этой статьи создайте учетную запись хранения и контейнер больших двоичных объектов в хранилище.
  • Служба сетки событий создает в этом контейнере большие двоичные объекты. Имена BLOB-объектов будут иметь имя подписки Event Grid со всеми буквами в верхнем регистре. Например, если подписка имеет My-Blob-Subscriptionимя , имена недоставленных BLOB-объектов будут иметь MY-BLOB-SUBSCRIPTION (myblobcontainer/MY-BLOB-SUBSCRIPTION/2019/8/8/5/111111111-1111-1111-1111-111111111111.json). Такое поведение предназначено для защиты от различий в обработке обращений между службами Azure.
  • В приведенном выше примере .../2019/8/8/5/... представляет ненулевая заполненная дата и час (UTC): .../YYYY/MM/DD/HH/....'
  • Созданные blob-объекты будут содержать одно или несколько событий в массиве, что является важным поведением, которое следует учитывать при обработке недоставленных сообщений.

Портал Azure

При создании подписки на события можно включить недоставленные сообщения на вкладке Дополнительные функции , как показано на следующем рисунке. После включения этой функции укажите контейнер BLOB-объектов, в котором будут храниться недоставленные события, и подписку Azure с хранилищем BLOB-объектов.

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

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

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

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

Azure CLI

containername=testcontainer

topicid=$(az eventgrid topic show --name demoTopic -g gridResourceGroup --query id --output tsv)
storageid=$(az storage account show --name demoStorage --resource-group gridResourceGroup --query id --output tsv)

az eventgrid event-subscription create \
  --source-resource-id $topicid \
  --name <event_subscription_name> \
  --endpoint <endpoint_URL> \
  --deadletter-endpoint $storageid/blobServices/default/containers/$containername

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

Примечание

Если вы используете Azure CLI на локальном компьютере, используйте Azure CLI 2.0.56 или более поздней версии. Инструкции по установке последней версии Azure CLI см. в этой статье.

PowerShell

$containername = "testcontainer"

$topicid = (Get-AzEventGridTopic -ResourceGroupName gridResourceGroup -Name demoTopic).Id
$storageid = (Get-AzStorageAccount -ResourceGroupName gridResourceGroup -Name demostorage).Id

New-AzEventGridSubscription `
  -ResourceId $topicid `
  -EventSubscriptionName <event_subscription_name> `
  -Endpoint <endpoint_URL> `
  -DeadLetterEndpoint "$storageid/blobServices/default/containers/$containername"

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

Примечание

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

Установка политики повтора

При создании подписки на сетку событий, можно задать значения для продолжительности попыток доставки события службой "Сетка событий Azure". По умолчанию служба "Сетка событий Azure" осуществляет не более 30 попыток в течение 24 часов (1440 минут). Вы можете задать любое из этих значений для подписки сетки событий. Значение для срока жизни события должно представлять собой целое число от 1 до 1440. Максимальное значение для попыток должно представлять собой целое число от 1 до 30.

Настроить интервал повтора невозможно.

Портал Azure

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

Снимок экрана: конфигурация политики повтора подписки на события.

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

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

Azure CLI

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

az eventgrid event-subscription create \
  -g gridResourceGroup \
  --topic-name <topic_name> \
  --name <event_subscription_name> \
  --endpoint <endpoint_URL> \
  --event-ttl 720

Чтобы установить максимальное количество попыток, отличающееся от 30, используйте следующий код:

az eventgrid event-subscription create \
  -g gridResourceGroup \
  --topic-name <topic_name> \
  --name <event_subscription_name> \
  --endpoint <endpoint_URL> \
  --max-delivery-attempts 18

Примечание

Если заданы оба параметра event-ttl и max-deliver-attempts, служба "Сетка событий Azure" использует первый параметр для указания срока действия и определения того, когда прекращать доставку событий. Например, если задать 30 минут как срок жизни (TTL) и 5 максимальных попыток доставки. Если событие не доставляется через 30 минут (или) не доставляется после 5 попыток( в зависимости от того, что произойдет раньше, событие становится недоставленным. Если задать максимальное число попыток доставки равным 10, в соответствии с графиком экспоненциальных повторных попыток максимальное число попыток доставки произойдет до достижения срока жизни в 30 минут, поэтому установка максимального числа попыток в 10 не повлияет в этом случае, а события будут недоставленными через 30 минут.

PowerShell

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

$topicid = (Get-AzEventGridTopic -ResourceGroupName gridResourceGroup -Name demoTopic).Id

New-AzEventGridSubscription `
  -ResourceId $topicid `
  -EventSubscriptionName <event_subscription_name> `
  -Endpoint <endpoint_URL> `
  -EventTtl 720

Чтобы установить максимальное количество попыток, отличающееся от 30, используйте следующий код:

$topicid = (Get-AzEventGridTopic -ResourceGroupName gridResourceGroup -Name demoTopic).Id

New-AzEventGridSubscription `
  -ResourceId $topicid `
  -EventSubscriptionName <event_subscription_name> `
  -Endpoint <endpoint_URL> `
  -MaxDeliveryAttempt 18

Примечание

Если заданы оба параметра event-ttl и max-deliver-attempts, служба "Сетка событий Azure" использует первый параметр для указания срока действия и определения того, когда прекращать доставку событий. Например, если задать 30 минут как срок жизни (TTL) и 5 максимальных попыток доставки. Если событие не доставляется через 30 минут (или) не доставляется после 5 попыток( в зависимости от того, что произойдет раньше, событие становится недоставленным. Если задать максимальное число попыток доставки равным 10, в соответствии с графиком экспоненциальных повторных попыток максимальное число попыток доставки произойдет до достижения срока жизни в 30 минут, поэтому установка максимального числа попыток в 10 не повлияет в этом случае, а события будут недоставленными через 30 минут.

Дальнейшие действия