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>();
  • 相关阅读:
    MemCached总结二:数据管理指令
    MemCached总结一:Unbutu操作系统下memcached服务器安装和telnet方式连接memcache
    Laravel5 开启Debug
    状压dp
    树形dp
    区间dp
    线性dp
    背包九讲
    dp求解各种子串子序列
    线段树详解
  • 原文地址:https://www.cnblogs.com/personblog/p/12988433.html
Copyright © 2011-2022 走看看