При настройке RetryOnFailure, что является параметром maxRetryDelay - PullRequest
0 голосов
/ 24 апреля 2019

Я использую Entity Framework Core 2.2 и решил следовать предложению блога и включить повторную попытку при ошибке:

services.AddDbContext<MyDbContext>( options =>
    options.UseSqlServer(Configurations["ConnectionString"]),
    sqlServerOptionsAction: sqlOptions =>
    {
        sqlOptions.EnableRetryOnFailure(
        maxRetryCount: 10,
        maxRetryDelay: TimeSpan.FromSeconds(5),
        errorNumbersToAdd: null);
    });

Мой вопрос: зачем нужен аргумент maxRetryDelay? Я ожидаю, что это будет время задержки между попытками, но название подразумевает его максимальное время. Означает ли это, что я могу выполнить свои 10 попыток с интервалом в 1 секунду, а не с интервалом в 5 секунд, как мне хочется?

1 Ответ

1 голос
/ 24 апреля 2019

Задержка между попытками рандомизирована до значения, указанного maxRetryDelay.

Это сделано для того, чтобы избежать одновременных повторных попыток и перегрузки сервера.Например, представьте, что 10K запросов к веб-сервису не выполняются из-за проблем с сетью и повторяются в то же время через 15 секунд.Сервер базы данных получит внезапную волну запросов по 15K.

Путем рандомизации задержки повторные попытки распределяются по времени и клиенту.

Задержка для каждой повторной попытки рассчитывается как ExecutionStragegy.GetNextDelay .Источник показывает, что это случайный экспоненциальный откат.

По умолчанию SqlServerRetringExecutionStrategy использует эту реализацию.Пользовательская стратегия повтора может использовать другую реализацию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...