Политики повторных попыток
Повторяйте операции при временных сбоях, увеличивая интервалы между попытками.
«Политики повторных попыток» — бесплатный урок C# Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 4 уроков всего.
Что такое Polly
Polly — это библиотека отказоустойчивости для .NET, которая помогает приложениям справляться с временными сбоями, медленными ответами и перегруженными зависимостями. Она предоставляет такие стратегии, как повторные попытки, автоматический выключатель, ограничение времени ожидания, резервный вариант и ограничение частоты запросов.
В этом курсе используется Polly v8 (API Polly.Core).
dotnet add package Polly.CoreЗачем нужны повторные попытки
Многие сбои являются временными: кратковременный сбой сети, временное превышение времени ожидания или перезапуск службы. Повторная попытка выполнить операцию через мгновение часто оказывается успешной и не беспокоит пользователя.
Повторные попытки следует применять только к временным ошибкам, но не к постоянным, например к ошибке 404.
Базовая стратегия повторных попыток
В Polly v8 вы создаёте ResiliencePipeline с помощью RetryStrategyOptions. По умолчанию возникшее исключение запускает повторную попытку.
using Polly;
using Polly.Retry;
var pipeline = new ResiliencePipelineBuilder()
.AddRetry(new RetryStrategyOptions
{
MaxRetryAttempts = 3
})
.Build();Выполнение через конвейер
Оберните потенциально сбойный вызов в ExecuteAsync. Polly выполнит его и, если он завершится исключением, повторит попытку заданное число раз.
await pipeline.ExecuteAsync(async token =>
{
await httpClient.GetAsync("https://api.example.com/data", token);
});Определение того, что повторять
Используйте ShouldHandle с построителем предикатов, чтобы повторять только определённые исключения или результаты и не повторять попытки при постоянных ошибках.
new RetryStrategyOptions<HttpResponseMessage>
{
ShouldHandle = new PredicateBuilder<HttpResponseMessage>()
.Handle<HttpRequestException>()
.HandleResult(r => r.StatusCode == HttpStatusCode.ServiceUnavailable),
MaxRetryAttempts = 3
};Постоянные и экспоненциальные интервалы ожидания
Мгновенные повторные попытки могут перегрузить испытывающую трудности службу. Интервалы ожидания разделяют попытки во времени. Polly поддерживает постоянные, линейные и экспоненциальные интервалы ожидания с помощью настройки BackoffType.
Экспоненциальные интервалы ожидания
Экспоненциальный интервал ожидания удваивает задержку после каждой попытки (например, 2 с, 4 с, 8 с). Установите BackoffType.Exponential и задайте базовое значение Delay.
new RetryStrategyOptions
{
MaxRetryAttempts = 4,
BackoffType = DelayBackoffType.Exponential,
Delay = TimeSpan.FromSeconds(2)
};Добавление случайной вариативности
Если множество клиентов повторяет запросы по одному расписанию, возникают синхронные всплески (так называемый «эффект стада»). Случайная вариативность добавляет случайность к задержкам. Включите UseJitter = true.
new RetryStrategyOptions
{
MaxRetryAttempts = 4,
BackoffType = DelayBackoffType.Exponential,
Delay = TimeSpan.FromSeconds(1),
UseJitter = true
};Реакция на каждую повторную попытку
Функция обратного вызова OnRetry позволяет записывать попытки в журнал или отправлять метрики. Она получает номер попытки и ошибку, вызвавшую эту попытку.
new RetryStrategyOptions
{
MaxRetryAttempts = 3,
OnRetry = args =>
{
Console.WriteLine($"Retry {args.AttemptNumber} after {args.RetryDelay}");
return default;
}
};Ограничение общего времени повторных попыток
Неограниченные повторные попытки могут заставить пользователя слишком долго ждать. Объедините повторные попытки со стратегией ограничения времени ожидания (она рассматривается далее) или ограничьте число попыток, чтобы операция быстро завершалась ошибкой, если восстановление маловероятно.
Повторные попытки для HttpClient
Для HTTP-вызовов зарегистрируйте обработчик отказоустойчивости для HttpClient, чтобы повторные попытки автоматически применялись к каждому запросу.
builder.Services.AddHttpClient("api")
.AddResilienceHandler("retry", pipeline =>
{
pipeline.AddRetry(new HttpRetryStrategyOptions
{
MaxRetryAttempts = 3,
BackoffType = DelayBackoffType.Exponential
});
});Быстрая проверка
Проверьте свои знания о повторных попытках.
Итоги
Политики повторных попыток обрабатывают временные сбои, повторно выполняя операцию. В Polly v8 вы создаёте конвейер с AddRetry, задаёте область его применения с помощью ShouldHandle и увеличиваете интервалы между попытками с помощью BackoffType.Exponential и UseJitter. Используйте OnRetry, чтобы отслеживать попытки, и зарегистрируйте обработчик отказоустойчивости для защиты каждого вызова HttpClient.
Изучай C# с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 93
- Уроки
- 346
Часто задаваемые вопросы
Урок «Политики повторных попыток» бесплатный?
Да — полный текст урока «Политики повторных попыток» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 4 уроков всего.
Чему я научусь в уроке «Политики повторных попыток»?
Повторяйте операции при временных сбоях, увеличивая интервалы между попытками. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C# Academy?
Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Политики повторных попыток»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C# Academy?
Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Политики повторных попыток
- Шаблон автоматического размыкателя
- Политики тайм-аутов и резервных вариантов
- Конвейеры отказоустойчивости