如何使用Polly过滤重试策略的特定端点
所有客户端请求MyServiceHttpClient
将重试。如何禁用重试策略特定的API?
services.AddHttpClient<MyServiceHttpClient>(client =>
{
/* configuration */
})
.AddPolicyHandler((serviceProvider, request) =>
HttpPolicyExtensions.HandleTransientHttpError()
.WaitAndRetryAsync(3,
sleepDurationProvider: retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)),
onRetry: (outcome, timespan, retryAttempt, context) =>
{
serviceProvider.GetService<ILogger<MyServiceHttpClient>>()
.LogWarning("Delaying for {delay}ms, then making retry {retry}.", timespan.TotalMilliseconds, retryAttempt);
}
));
字符串
2条答案
按热度按时间qoefvg9y1#
您可以尝试使用no-op策略:
字符串
或者另一种方法是重复
HandleTransientHttpError
逻辑,但添加相应的滤波器。ybzsozfc2#
Even though Guru Stron's proposed solution的工作原理是很难维护IMHO。
让我给你一个替代的解决方案。
WaitAndRetryAsync
有许多不同的重载。有些需要retryCount
参数,而有些则不需要。如果使用需要IEnumerable<TimeSpan> retryDurations
参数的重载,则可以执行以下操作:字符串
现在让我们看看相关的
GetRetryDelays
实现型
型