.netcore2.1 添加Policy异常、重试、超时策略

  使用NuGet包管理添加Microsoft.Extensions.Http.Polly引用,项目是.netcore2.1版本,因此Polly添加也是2.1版本,如自己.netcore版本比较高,可以选择高版本,目前最新的是3.1版本。

using Microsoft.Extensions.DependencyInjection;
using Polly;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;

namespace MyProject.Extentions
{
    public static class HttpRetryExtension
    {
        public static void AddRetryProxy<TCient>(this IServiceCollection services) where TCient : class
        {
            //重试策略
            var retryPolicy = Policy.Handle<HttpRequestException>()//指定要处理的异常
                .Or<Exception>()
                .OrResult<HttpResponseMessage>(res => { return res.StatusCode != System.Net.HttpStatusCode.OK; })//返回结果不是Ok重试
                .WaitAndRetryAsync(
                    //指定重试次数
                    sleepDurations: new[]
                    {
                        TimeSpan.FromMilliseconds(100),
                        TimeSpan.FromMilliseconds(200),
                        TimeSpan.FromMilliseconds(300)
                    },
                    //出异常会执行以下代码
                    onRetry: (exception, ts, context) =>
                    {
                        Console.WriteLine($"polly.retry:exMsg={ exception.Exception?.Message}, {ts.Minutes * 60 + ts.Seconds}");

                    });

            //超时策略
            var timeoutPolicy = Policy.TimeoutAsync<HttpResponseMessage>(30);//超时30秒重试

            services.AddHttpClient<TCient>()
                .AddPolicyHandler(retryPolicy)
                .AddPolicyHandler(timeoutPolicy);
        }

    }
}

  在Startup类中ConfigureServices方法,对需要重试请求的http请求Service添加注入即可。

    public void ConfigureServices(IServiceCollection services)
        {
          

            //http
           
            services.AddRetryProxy<IdentityOCRService>();
原文地址:https://www.cnblogs.com/personblog/p/12988433.html