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


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

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

Примечание.

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

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

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

Примечание.

  • Перед запуском команд из этой статьи создайте учетную запись хранения и контейнер больших двоичных объектов в хранилище.
  • Служба сетки событий создает в этом контейнере большие двоичные объекты. Имена BLOB-объектов будут иметь имя подписки Event Grid со всеми буквами в верхнем регистре. Например, если имя подписки — My-Blob-Subscriptionэто, имена недоставленных больших двоичных объектов будут иметь 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/....'
  • Созданные большие двоичные объекты мертвых букв содержат одно или несколько событий в массиве, что является важным поведением, которое следует учитывать при обработке мертвых букв.

Портал 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 PowerShell версии 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 минут.

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