Повторить попытку
ОБЛАСТЬ ПРИМЕНЕНИЯ: все уровни Управление API
Политика retry
выполняет свои дочерние политики один раз и затем повторяет их выполнение до тех пор, пока параметр condition
попыток не примет значение false
или параметр count
попыток не будет исчерпан.
Примечание.
Задайте элементы политики и дочерние элементы в порядке, указанном в правиле политики. Узнайте, как устанавливать или изменять политики службы управления API.
Правило политики
<retry
condition="Boolean expression or literal"
count="number of retry attempts"
interval="retry interval in seconds"
max-interval="maximum retry interval in seconds"
delta="retry interval delta in seconds"
first-fast-retry="boolean expression or literal">
<!-- One or more child policies. No restrictions. -->
</retry>
Атрибуты
Атрибут | Description | Обязательное поле | По умолчанию. |
---|---|---|---|
condition | Логическое значение. Указывает, следует ли остановить повторные попытки (false ) или продолжить (true ). Допустимы выражения политики. |
Да | Н/П |
count | Положительное число от 1 до 50, указывающее количество повторных попыток для попытки. Допустимы выражения политики. | Да | Н/П |
interval | Положительное значение в секундах, определяющее интервал ожидания между повторными попытками. Допустимы выражения политики. | Да | Н/П |
max-interval | Положительное значение в секундах, определяющее максимальный интервал ожидания между повторными попытками. Оно используется для реализации экспоненциального алгоритма повторения. Допустимы выражения политики. | No | Н/П |
delta | Положительное значение в секундах, определяющее увеличение интервала ожидания. Используется для реализации линейного и экспоненциального алгоритмов повторения. Допустимы выражения политики. | No | Н/П |
first-fast-retry | Логическое значение. Если присвоено значение true , первая попытка повтора выполняется немедленно. Допустимы выражения политики. |
No | false |
Время ожидания повторной попытки
Если указан только параметр
interval
, попытки выполняются с фиксированным интервалом.Если указаны только
interval
иdelta
, используется алгоритм повторных попыток с линейным интервалом. Время ожидания между повторными попытками увеличивается по следующей формуле:interval + (count - 1)*delta
.Если указаны
interval
,max-interval
иdelta
, используется алгоритм повторных попыток с экспоненциальным интервалом. Время ожидания между повторными попытками увеличивается экспоненциально по следующей формуле:interval + (2^(count - 1)) * random(delta * 0.8, delta * 1.2)
, до максимального интервала, заданного параметромmax-interval
.Например, если для
interval
иdelta
задано значение 10 секунд, аmax-interval
составляет 100 секунд, приблизительное время ожидания между повторными попытками увеличивается следующим образом: 10 секунд, 20 секунд, 40 секунд, 80 секунд, а для оставшихся повторных попыток используется интервал 100 секунд.
Элементы
Политика retry
может содержать любые другие политики в качестве дочерних элементов.
Использование
- Разделы политики: inbound, outbound, backend, on-error.
- Области политики: глобальная, рабочая область, продукт, API, операция
- Шлюзы: классическая, версия 2, потребление, локальное размещение, рабочая область
Примеры
Переадресация запросов с экспоненциальной повторными попытками
В следующем примере перенаправление запроса повторяется до 10 раз, следуя экспоненциальному алгоритму повторения. Так как first-fast-retry
задано значение false
, все попытки повторных попыток подвергаются экспоненциальному увеличению времени ожидания повторных попыток (в этом примере приблизительно 10 секунд, 20 секунд, 40 секунд, ...), до максимального ожидания max-interval
.
<retry
condition="@(context.Response.StatusCode == 500)"
count="10"
interval="10"
max-interval="100"
delta="10"
first-fast-retry="false">
<forward-request buffer-request-body="true" />
</retry>
Отправка запроса при сбое первоначального запроса
В следующем примере отправка запроса на URL-адрес, отличный от заданной серверной части, повторяется до трех раз, если подключение удалено/его время истекает, или запрос приводит к ошибке на стороне сервера. Так как для first-fast-retry
задано значение True, первая повторная попытка выполняется немедленно после первоначального сбоя запроса. Обратите внимание, что send-request
должно задавать для ignore-error
значение True, чтобы response-variable-name
имело значение NULL в случае ошибки.
<retry
condition="@(context.Variables["response"] == null || ((IResponse)context.Variables["response"]).StatusCode >= 500)"
count="3"
interval="1"
first-fast-retry="true">
<send-request
mode="new"
response-variable-name="response"
timeout="3"
ignore-error="true">
<set-url>https://api.contoso.com/products/5</set-url>
<set-method>GET</set-method>
</send-request>
</retry>
Связанные политики
Связанный контент
Дополнительные сведения о работе с политиками см. в нижеуказанных статьях.
- Руководство. Преобразование и защита API
- Полный перечень операторов политик и их параметров см. в справочнике по политикам.
- Выражения политики
- Настройка или изменение политик
- Повторное использование конфигураций политик
- Репозиторий фрагментов политик
- Создание политик с помощью Microsoft Copilot в Azure