Иногда запросы, сделанные с помощью 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());