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

 

posted @   低调码农哥!  阅读(1663)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示