配置RetryOnFailure时,maxRetryDelay参数是什么

时间:2019-04-24 09:45:46

标签: entity-framework-core

我使用的是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 个答案:

答案 0 :(得分:1)

重试is randomized之间的延迟直至Kasper, Sint-Truiden, base64-string Jane, Paris, notavailable 指定的值。

这样做是为了避免同时发生多次重试并使服务器不堪重负。想象一下,例如由于网络问题导致对Web服务的10K请求失败,并在15秒后同时重试。数据库服务器将突然收到1万5千次查询。

通过随机化延迟,重试分散在时间和客户端上。

每次重试的延迟由ExecutionStragegy.GetNextDelay计算。 source表明这是一个随机的指数补偿。

默认的SqlServerRetryingExecutionStrategy使用该实现。自定义重试策略可以使用其他实现方式