【发布时间】:2021-11-23 15:58:58
【问题描述】:
我正在尝试使用 polly 创建一个解决方案,我请求其他 api。
我有一个指向同一服务的多个实例的 URL 列表。
我希望当第一个请求失败时,另一个应该自动从我列表中的下一个 url 开始。
这是一个示例,我使用两个静态地址尝试此行为
这个解决方案的问题是,在我开始下一个请求之前,url 不会改变。
我希望每次重试时 url 都会改变
public static void ConfigureUserServiceClient(this IServiceCollection services)
{
_userServiceUri = new Uri("https://localhost:5001");
services.AddHttpClient("someService", client =>
{
client.BaseAddress = _userServiceUri;
client.DefaultRequestHeaders.Add("Accept", "application/json");
}).AddPolicyHandler(retryPolicy());
}
private static IAsyncPolicy<HttpResponseMessage> retryPolicy()
{
return Policy.HandleResult<HttpResponseMessage>(r => r.StatusCode == HttpStatusCode.RequestTimeout)
.WaitAndRetryAsync(3, retryAttempt => TimeSpan.FromSeconds(retryAttempt),
onRetry: (result, span, ctx) =>
{
_userServiceUri = new Uri("https://localhost:5002");
});
}
【问题讨论】:
标签: c# asp.net-core polly