Новое в Symfony 5.2: HTTP-клиент с возможностью повторной попытки

Иногда запросы, сделанные с помощью HTTP-клиента, завершаются ошибкой по разным причинам (проблемы с сетью, временные ошибки сервера и т. д.). В Symfony 5.2 улучшили компонент HttpClient новой дополнительной функцией для автоматического повторения неудачных запросов.

При использовании HttpClient внутри приложения Symfony используйте параметр retry_failed, чтобы включить и настроить эту функцию:

# config/packages/framework.yaml
framework:
    # ...
    http_client:
        # ...
        retry_failed: true

Вот и все. Теперь Symfony будет повторять все неудавшиеся запросы до 3 раз с кодом состояния, включенным в (423, 425, 429, 500, 502, 503, 504, 507, 510), и будет ждать экспоненциально от 1 секунды (первая попытка) до 4 секунд (третья попытка).

Все параметры этой функции настраиваются следующим образом:

# config/packages/framework.yaml
framework:
    # ...
    http_client:
        # ...
        retry_failed:
            # only retry errors with these HTTP codes
            http_codes: [429, 500]
            max_retries: 2
            # waiting time between retries (in milliseconds)
            delay: 1000
            # if set, the waiting time of each retry increases by this factor
            # (e.g. first retry: 1000ms; second retry: 3 * 1000ms; etc.)
            multiplier: 3

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

При использовании HttpClient вне приложения Symfony используйте новый класс RetryableHttpClient, чтобы обернуть ваш обычный HTTP-клиент:

use Symfony\Component\HttpClient\RetryableHttpClient;

$client = new RetryableHttpClient(HttpClient::create());