.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>();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM