【问题标题】:Change Failed Domain After few Retry Policy .Net Core几次重试策略.Net Core后更改失败的域
【发布时间】:2021-04-08 14:04:09
【问题描述】:

我有这段代码,我正在使用 Polly 处理失败的网络请求,我想知道是否有办法在使用 polly 进行几次故障转移后将域从 https://www.api1.com 更改为 https://www.api2.com

var logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .Enrich.FromLogContext()
    .WriteTo.ColoredConsole()
    .CreateLogger();

var httpClient = new HttpClient();
var response = await Policy
    .HandleResult<HttpResponseMessage>(message => !message.IsSuccessStatusCode)
    .WaitAndRetryAsync(3, i => TimeSpan.FromSeconds(2), (result, timeSpan, retryCount, context) =>
    {
        logger.Warning($"Request failed with {result.Result.StatusCode}. Waiting {timeSpan} before 
                         next retry. Retry attempt {retryCount}");
    })
    .ExecuteAsync(() => httpClient.GetAsync("https://www.api1.com"));

if (response.IsSuccessStatusCode)
    logger.Informa`enter code here`tion("Response was successful.");
else
    logger.Error($"Response failed. Status code {response.StatusCode}");

提前谢谢你!

【问题讨论】:

    标签: c# .net asp.net-core .net-core blazor


    【解决方案1】:

    忽略任何其他概念或其他问题。一种方法是简单地更改 WaitAndRetryAsync

    中的 url

    随之而来的是低技术方法

    var url1 = "https://postman-echo.com/status/500";
    var url2 = "https://postman-echo.com/status/200";
    
    var currentUrl = url1;
    
    var httpClient = new HttpClient();
    
    var response = await Policy
       .HandleResult<HttpResponseMessage>(message => !message.IsSuccessStatusCode)
       .WaitAndRetryAsync(3, i => TimeSpan.FromSeconds(2), (result, timeSpan, retryCount, context) =>
       {
          Console.WriteLine($"Request failed with {result.Result.StatusCode}. Waiting {timeSpan} before next retry.Retry attempt { retryCount}");
          if (retryCount > 2)
          {
             currentUrl = url2;
             Console.WriteLine("Changing to " + currentUrl);
          }
       })
       .ExecuteAsync(() =>
       {
          Console.WriteLine(currentUrl);
          return httpClient.GetAsync(currentUrl);
       });
    

    输出

    https://postman-echo.com/status/500
    Request failed with InternalServerError. Waiting 00:00:02 before next retry.Retry attempt 1
    https://postman-echo.com/status/500
    Request failed with InternalServerError. Waiting 00:00:02 before next retry.Retry attempt 2
    https://postman-echo.com/status/500
    Request failed with InternalServerError. Waiting 00:00:02 before next retry.Retry attempt 3
    Changing to https://postman-echo.com/status/200
    https://postman-echo.com/status/200
    

    免责声明:这并不是完美代码或完整解决方案的堡垒。加入胡椒和盐调味,并尽职尽责¯\_(ツ)_/¯

    【讨论】:

      猜你喜欢
      • 2022-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多