zoukankan      html  css  js  c++  java
  • .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>();
  • 相关阅读:
    java几种数据的默认扩容机制
    web.xml配置详解
    Bootstrap文件上传组件
    JAVA四则运算算法
    Oracle 和 mysql 的批量操作Sql语句 的区别
    JAVA使用ItextPDF
    c# 状态机实现
    c++11模拟boost元占位符placeholder
    vs2012 函数参数内存对齐引发编译错误
    windows下matplotlib编译安装备忘
  • 原文地址:https://www.cnblogs.com/personblog/p/12988433.html
Copyright © 2011-2022 走看看