RetryPolicy
in package
Политика повторного выполнения запроса.
Определяет число повторов, коды ответов, при которых повтор осмыслен
(по умолчанию 429 и 5xx), а также реагирование на сетевые сбои и таймауты.
Расчёт паузы делегируется Backoff; при наличии заголовка Retry-After
он имеет приоритет над расчётной задержкой.
Table of Contents
Methods
- __construct() : mixed
- delayFor() : float
- Пауза перед повтором указанной попытки.
- maxRetries() : int
- Максимальное число повторов.
- respectsRetryAfter() : bool
- Учитывать ли заголовок `Retry-After`.
- retriesNetworkError() : bool
- Повторять ли при сетевом сбое.
- retriesStatus() : bool
- Нужен ли повтор для указанного статуса ответа.
- retriesTimeout() : bool
- Повторять ли при таймауте.
- shouldRetry() : bool
- Нужен ли повтор после завершившейся попытки (без учёта лимита попыток).
Methods
__construct()
public
__construct([int $maxRetries = 0 ][, Backoff $backoff = new Backoff() ][, array<int, int> $retryStatuses = [429, 500, 502, 503, 504] ][, bool $retryOnNetworkError = true ][, bool $retryOnTimeout = true ][, bool $respectRetryAfter = true ][, callable(Request, Array, Array, int): bool|null $decider = null ]) : mixed
Parameters
- $maxRetries : int = 0
-
максимальное число повторов (0 — повторов нет)
- $backoff : Backoff = new Backoff()
-
расчёт паузы между повторами
- $retryStatuses : array<int, int> = [429, 500, 502, 503, 504]
-
HTTP-статусы, при которых повтор осмыслен
- $retryOnNetworkError : bool = true
-
повторять ли при сетевых сбоях
- $retryOnTimeout : bool = true
-
повторять ли при таймаутах
- $respectRetryAfter : bool = true
-
учитывать ли заголовок
Retry-After - $decider : callable(Request, Array, Array, int): bool|null = null
-
собственное решение о повторе (запрос, ответ или ошибка, номер попытки); заменяет проверку статусов и типов ошибок
delayFor()
Пауза перед повтором указанной попытки.
public
delayFor(int $attempt[, float $randomFraction = -1.0 ]) : float
Parameters
- $attempt : int
-
номер завершившейся попытки (>= 1)
- $randomFraction : float = -1.0
-
доля джиттера [0, 1) для детерминизма в тестах
Return values
float —задержка в секундах
maxRetries()
Максимальное число повторов.
public
maxRetries() : int
Return values
int —число повторов
respectsRetryAfter()
Учитывать ли заголовок `Retry-After`.
public
respectsRetryAfter() : bool
Return values
bool —true, если значение Retry-After имеет приоритет
retriesNetworkError()
Повторять ли при сетевом сбое.
public
retriesNetworkError() : bool
Return values
bool —true, если сетевые сбои повторяются
retriesStatus()
Нужен ли повтор для указанного статуса ответа.
public
retriesStatus(int $status) : bool
Parameters
- $status : int
-
код ответа
Return values
bool —true, если статус входит в набор повторяемых
retriesTimeout()
Повторять ли при таймауте.
public
retriesTimeout() : bool
Return values
bool —true, если таймауты повторяются
shouldRetry()
Нужен ли повтор после завершившейся попытки (без учёта лимита попыток).
public
shouldRetry(Request $request, Response|null $response, Throwable|null $error, int $attempt) : bool
Если задан собственный решатель — решает он; иначе ответ повторяется по набору статусов, а ошибка — по типу (таймаут или прочий сетевой сбой).
Parameters
- $request : Request
-
запрос
- $response : Response|null
-
полученный ответ или
null - $error : Throwable|null
-
возникшая ошибка или
null - $attempt : int
-
номер завершившейся попытки (>= 1)
Return values
bool —true, если повтор нужен