CloudCastle Curl

RetryPolicy
in package

FinalYes

Политика повторного выполнения запроса.

Определяет число повторов, коды ответов, при которых повтор осмыслен (по умолчанию 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, если повтор нужен

On this page

Search results