配置 RetryOnFailure 时,maxRetryDelay 参数是什么

Rag*_*ock 5 entity-framework-core

我正在使用 Entity Framework Core 2.2,我决定关注一些博客 sugestion 并启用失败重试:

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

我的问题是maxRetryDelay论据是什么?我希望它是重试之间的延迟时间,但这个名字暗示了它的最长时间,这是否意味着我可以间隔 1 秒进行 10 次重试,而不是我想要的间隔 5 秒?

Pan*_*vos 8

重试之间的延迟随机化为由 指定的值maxRetryDelay

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

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

每次重试的延迟由ExecutionStragegy.GetNextDelay计算。在表示这是一个随机指数退避。

默认的SqlServerRetryingExecutionStrategy使用该实现。自定义重试策略可以使用不同的实现