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


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

Push-доставка пространств имен сетки событий обеспечивает надежную доставку. Сетка событий пытается немедленно доставлять каждое сообщение для каждой соответствующей подписки. Если конечная точка подписчика не подтверждает получение события или произошла ошибка, Сетка событий повторяет попытку доставки на основе предопределенного расписания повтора и политики повтора. По умолчанию Служба "Сетка событий" передает одно событие в одно время подписчику.

Примечание.

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

Подписка на события

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

Расписание повторной доставки

Когда сетка событий получает ошибку для попытки доставки событий, сетка событий решает, следует ли повторить доставку на основе типа ошибки.

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

Условия.

  • ArgumentException
  • TimeoutException
  • UnauthorizedAccessException
  • OperationCanceledException
  • SocketException |

Коды ошибок

  • 404 - NotFound
  • 401 - Unauthorized
  • 403 - Forbidden
  • 400 -BadRequest
  • 414 RequestUriTooLong

Примечание.

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

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

  • 0 секунд (немедленная повторная попытка)
  • 10 seconds
  • 30 секунд
  • 1 минута
  • 5 мин

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

Политика повтора

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

  • Максимальное число доставки — значение должно быть целым числом от 1 до 10. Значение по умолчанию — 10. Для принудительной доставки это свойство определяет максимальное количество попыток доставки.
  • Хранение — это свойство также называется event time to live. Значение должно быть значением длительности ISO 8601 с точностью минуты. Начиная с момента публикации события это свойство определяет интервал времени, после которого истекает срок действия сообщения. Минимально допустимое значение — "PT1M" (1 минута). Максимально допустимое значение — 7 дней или время хранения базового раздела, в зависимости от того, что меньше. портал Azure предоставляет простой пользовательский интерфейс, в котором указываются дни, часы и минуты в виде целых чисел.

Примечание.

Если задано и Retention то, сетка Maximum delivery countсобытий использует их для определения момента остановки доставки событий. Либо один останавливает доставку событий. Например, если в качестве срока хранения задано 20 минут и 10 попыток доставки, это означает, что если событие не доставляется через 20 минут или не доставляется после 10 попыток, в зависимости от того, что происходит сначала, событие является недоставленным. Однако из-за расписания повторных попыток установка максимального количества попыток доставки не оказывает влияния, так как события будут недоставлены в первую очередь через 20 минут. Это связано с фактом в минуту 20, попытка доставки #8 (0, 10s, 30s, 1m, 5m, 10m, 15m, 20m) происходит, но в то время событие является недоставленным.

Пакетная обработка выходных данных

Если веб-перехватчики используются в качестве типа конечной точки назначения, сетка событий по умолчанию отправляет каждое событие по отдельности подписчикам. Сетка событий можно настроить для пакетных событий для доставки для повышения производительности HTTP в сценариях высокой пропускной способности. Пакетная обработка отключена по умолчанию и может быть включена для каждой подписки на события.

При использовании Центров событий в качестве типа конечной точки сетка событий всегда пакетирует события для максимальной эффективности и производительности. Конфигурация пакетной политики недоступна, так как по умолчанию сетка событий обрабатывает поведение пакетной обработки при доставке в Центры событий Azure.

Политика пакетной обработки

У пакетной доставки есть два параметра:

  • Максимальное количество событий на пакет — максимальное число событий сетки событий доставляется на каждый пакет. Значение должно быть целым числом от 1 до 5 000. Это число никогда не превышается. Однако меньше событий может быть доставлено, если больше событий не доступно во время доставки. Если доступно меньше событий, чем указано в параметре, Сетка событий не будет задерживать события для создания пакета.
  • Предпочтительный размер пакета в килобайтах — целевой размер пакета в килобайтах. Значение должно быть числом от 1 до 1024. Как и в случае с максимальными событиями, размер пакета может быть меньше, если во время доставки недостаточно событий. Пакет может быть больше предпочтительного размера, если размер одного события превышает значение этого параметра. Например, если предпочтительный размер равен 4 КБ, а событие 10 КБ отправляется в сетку событий, то событие 10 КБ доставляется, а не удаляется.

Пакетная доставка настраивается для каждой подписки на события с помощью портала, интерфейса командной строки, PowerShell или пакетов SDK.

Логика работы пакетной обработки

  • Принцип All-or-none

    "Сетка событий" работает с семантикой all-or-none (все полностью или ничего). Она не поддерживает частичное выполнение пакетной доставки. Подписчики должны быть осторожны, чтобы запрашивать только столько событий на пакет, сколько они могут обрабатывать в 30 секундах.

  • Оптимизация пакетной обработки

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

  • По умолчанию параметр установлен на ВЫКЛ.

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

  • Значения по умолчанию

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

Портал Azure

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

Снимок экрана: вкладка

События недоставленных сообщений

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

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

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

"Сетка событий" отправляет событие расположение недоставленных в том случае, когда действие выполнялось все повторные попытки. Если Сетка событий получает код ответа 400 (ошибка запроса) или 413 (слишком большой запрос), она немедленно планирует отправку события в очередь недоставленных сообщений. Эти коды отклика указывают, что доставка события никогда не будет выполнена успешно.

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

Предусмотрена 5-минутная задержка между последней попыткой доставить событие и доставкой этого события в расположение недоставленных сообщений. Эта задержка предназначена для уменьшения числа операций в Хранилище BLOB-объектов. Если расположение недоставленных сообщений недоступно в течение четырех часов, событие удаляется.

Прежде чем задать параметры расположения недоставленных сообщений, необходимо создать учетную запись хранения с контейнером. При создании подписки на событие необходимо ввести конечную точку для этого контейнера. Конечная точка имеет следующий формат: /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-name>/blobServices/default/containers/<container-name>

Возможно, вы захотите получать уведомления при отправке событий в очередь недоставленных сообщений. Чтобы использовать службу "Сетка событий Azure" для реагирования на недоставленные события, создайте подписку на события для хранилища больших двоичных объектов недоставленных сообщений. Каждый раз, когда ваше хранилище больших двоичных объектов недоставленных сообщений получает недоставленное событие, служба "Сетка событий Azure" уведомляет вашего обработчика. Обработчик отвечает действиями, которые необходимо предпринять для согласования недоставленных событий.

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

Форматы событий доставки

В этом разделе приведены примеры событий и недоставленных событий с помощью схемы CloudEvents 1.0, формата метаданных сообщения, поддерживаемого в разделах пространства имен.

Схема CloudEvents 1.0

Мероприятие

{
    "id": "caee971c-3ca0-4254-8f99-1395b394588e",
    "source": "mysource",
    "dataversion": "1.0",
    "subject": "mySubject",
    "type": "fooEventType",
    "datacontenttype": "application/json",
    "data": {
        "prop1": "value1",
        "prop2": 5
    }
}

Событие в очереди недоставленных сообщений

[
  {
    "deadLetterProperties": {
      "deadletterreason": "Maximum delivery attempts was exceeded.",
      "deliveryattempts": 1,
      "deliveryresult": "Event was not acknowledged nor rejected.",
      "publishutc": "2023-11-01T20:33:51.4521467Z",
      "deliveryattemptutc": "2023-11-01T20:33:52.3692079Z"
    },
    "event": {
      "comexampleextension1": "value1",
      "id": "A234-1234-1234",
      "comexampleothervalue": "5",
      "datacontenttype": "text/xml",
      "specversion": "1.0",
      "time": "2018-04-05T17:31:00Z",
      "source": "/mycontext",
      "type": "com.example.someevent",
      "data": <your-event-data>
    }
  }
]

LastDeliveryOutcome: Probation

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

Ошибка Длительность надзора
Занято 10 seconds
Не найдено 5 мин
SocketError 30 секунд
ResolutionError 5 мин
Выключено 5 мин
Полностью 5 мин
TimedOut 10 seconds
Не авторизовано 5 мин
Запрещено 5 мин
InvalidAzureFunctionDestination 10 минут

Примечание.

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

Состояние доставки сообщения

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

Коды успешной доставки

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

  • 200 OK
  • 201 Создано
  • 202 — принято
  • 203 — не заслуживающая доверия информация
  • 204 Нет контента

Коды сбоя доставки

Все остальные коды, не указанные в приведенном выше наборе (200-204), считаются сбоями и будут извлечены при необходимости. Некоторые из них связаны с конкретными политиками повторных попыток, описанными ниже, все остальные следуют стандартному расписанию повторных попыток. Важно помнить, что из-за высокой степени параллелизма архитектуры Сетки событий поведение повторов не детерминировано.

Код состояния Поведение при повторе
400 — недопустимый запрос Повтор не выполняется.
401 — не авторизовано Повтор через 5 минут или больше для конечных точек ресурсов Azure.
403. Запрещено Повтор не выполняется.
404 Не найдено Повтор через 5 минут или больше для конечных точек ресурсов Azure.
408 — истекло время ожидания запроса Повтор через 2 минуты или больше.
413 — размер запрашиваемой сущности слишком большой Повтор не выполняется.
503 Сервис недоступен Повтор через 30 секунд или больше.
Все остальные Повтор через 10 секунд или больше.

Пользовательские свойства доставки

Подписки на события позволяют настраивать заголовки HTTP, которые включаются в доставляемые события. Благодаря этой возможности вы можете задавать пользовательские заголовки, требуемые местом назначения. При создании подписки на событие можно задать до 10 заголовков. Размер значения заголовка не должен превышать 4096 байт (4 КБ). Пользовательские заголовки можно задавать для событий, которые доставляются следующим получателям:

  • Веб-перехватчики
  • Центры событий Azure

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