我正在尝试使用 polly 创建一个解决方案,其中我请求其他 api。
我有同一服务的多个实例的 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");
});
}
Run Code Online (Sandbox Code Playgroud)