public static IAsyncPolicy<HttpResponseMessage> GetSaveExceptionPolicy(
IServiceProvider serviceProvider)
{
return Policy
.HandleResult<HttpResponseMessage>(x => x.StatusCode == HttpStatusCode.Forbidden)
.FallbackAsync(new HttpResponseMessage(HttpStatusCode.OK),
d =>
{
var mediator = serviceProvider.GetService<IMediatorService>();
mediator.SaveFailedOnInvalidLock();
return Task.CompletedTask;
});
}
serviceCollection
.AddHttpClient<IMyClient, MyClient>(p =>
{
p.BaseAddress = baseAddress;
p.Timeout = TimeSpan.FromMinutes(10);
})
.ConfigurePrimaryHttpMessageHandler(sp => new HttpClientHandler() { MaxConnectionsPerServer = 10})
.AddPolicyHandler((serviceProvider, request) => GetSaveExceptionPolicy(serviceProvider));
这是调解员电话
public void SaveFailedOnInvalidLock()
{
_logger.Error($"Data Point Saving failed");
SaveFailedOnInvalidLock?.Invoke();
}
这个 MyClient Post 方法被非常频繁地调用。例如,在给定的一秒内,有 7 个呼叫正在进行。并且每秒钟有 7 个在继续。
应用程序工作正常,直到 Post 方法返回“HttpStatusCode.Forbidden”。当它返回 Forbidden 时,一些下一个调用不会到达 REST 端点。
这是由于某些连接不可用吗?例如:由于“fobidden”状态和 polly 后备策略而丢失的连接很少?(因为最大限制是 10)?
或者这是由于 Async 及其时间安排使得当第二批呼叫进来时连接仍在使用中?
提前致谢