Обработка временных ошибок HTTP с помощью библиотеки Polly¶
Ранее уже упоминалось, что HttpClient состоит из “конвейера” обработчиков. Существенное преимущество такого подхода состоит в том, что он позволяет решать сквозные задачи для всех запросов. Например, IHttpClientFactory автоматически добавляет обработчик, регистрирующий код состояния и продолжительность каждого исходящего запроса.
Помимо журналирования, ещё одним распространённым требованием является обработка временных ошибок при вызове внешнего API. В случае таких ошибок иногда может быть успешным даже простой повтор запроса, однако необходимость писать для этого код вручную довольно обременительна.
Для решения подобных задач существует библиотека Polly. Для примера добавим простую стратегию повторной отправки запросов. Нам понадобится выполнить следующие шаги:
- установить пакет NuGet Microsoft.Extensions.Http.Polly;
- настроить именованного или типизированного клиента;
- настроить стратегию:
В приведенном примере мы настраиваем обработчик ошибок так, чтобы он, при возникновении ошибки, делал паузу указанной продолжительности, затем повторял запрос, возвращая ошибку только после трёх неуспешных повторов. По умолчанию будет повторяться запрос, который либо:
- возбуждает исключение
HttpRequestException, указывая на ошибку на уровне протокола; - возвращает код состояния HTTP 5xx, указывая на ошибку сервера;
- возвращает код состояния HTTP 408, указывая на тайм-аут.
Совет
О возможностях более тонкой настройки можно прочести в документации к библиотеке Polly
Дата создания : 30 октября 2022 г.