我使用的是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秒?
答案 0 :(得分:1)
重试is randomized之间的延迟直至Kasper, Sint-Truiden, base64-string
Jane, Paris, notavailable
指定的值。
这样做是为了避免同时发生多次重试并使服务器不堪重负。想象一下,例如由于网络问题导致对Web服务的10K请求失败,并在15秒后同时重试。数据库服务器将突然收到1万5千次查询。
通过随机化延迟,重试分散在时间和客户端上。
每次重试的延迟由ExecutionStragegy.GetNextDelay计算。 source表明这是一个随机的指数补偿。
默认的SqlServerRetryingExecutionStrategy使用该实现。自定义重试策略可以使用其他实现方式