• .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>();
  • 相关阅读:
    递归
    数组[]
    AngularJs学习总结-了解基本特性(-)
    终于落脚了!
    总结一下面试中的知识点
    bootstrap学习总结-js组件(四)
    spark学习进度3:Scala中变量,常量,数据类型,运算符,表达式,循环,方法,函数的基本使用
    spark学习进度2
    spark学习进度1
    后台得到jsp提交name属性相同的内容
  • 原文地址:https://www.cnblogs.com/personblog/p/12988433.html
Copyright © 2020-2023  润新知