polly异常重试、熔断

Polly:可以用来简化熔断降级的处理。主要功能:出现异常后,重试 断路器 超时检测 缓存 失败处理

熔断降级:防止一个服务请求失败导致整个系统崩溃,熔断后就不去请求此服务,快速失败

断路保护:连续出现N次异常,熔断几秒,等待的这段时间会抛出BrokenCircuitException异常。等待时间结束再执行Excute的时候如果又错了(一次就够),那么继续熔断一段时间,否则回复正常。熔断的目的是避免服务不可用了还是使劲请求给系统造成更大压力

//处理ArgumentException,NullReferenceException异常
            //ISyncPolicy policy = Policy
            //    .Handle<ArgumentException>()
            //    .Or<NullReferenceException>()
            //    .Fallback(cancellToken=> {
            //    Console.WriteLine("出错");
            //});

            ////处理包含"没有姓名参数"ArgumentException的异常
            //ISyncPolicy policy = Policy
            //    .Handle<ArgumentException>(argEx => (argEx.Message == "没有姓名参数"))
            //    .Fallback(cancellToken => {
            //    Console.WriteLine("出错");
            //});

            ////重试3次
            //ISyncPolicy policy = Policy
            //    .Handle<Exception>()
            //    .Retry(3);//.RetryForever()//一直试

//间隔1s、5s、10s、20s、1min各重试一次
Polly.Policy.Handle<WebException>().WaitAndRetry(
                  new[] {
            TimeSpan.FromSeconds(1),
            TimeSpan.FromSeconds(5),
            TimeSpan.FromSeconds(10),
            TimeSpan.FromSeconds(20),
            TimeSpan.FromMinutes(1)
        },(ex, ts, i, context) =>{Console.WriteLine("出错");});

            //重试3次,每次等待2秒
            ISyncPolicy policy = Policy
                .Handle<Exception>()
                .WaitAndRetry(3, i => TimeSpan.FromSeconds(1));

            //多次出错,断路保护
            ISyncPolicy policyCir = Policy
               .Handle<Exception>().CircuitBreaker(2, TimeSpan.FromSeconds(5));
            policy = policy.Wrap(policyCir);

            policy.Execute(() =>
            {
                Console.WriteLine("任务开始");
                throw new Exception("没有姓名参数");
            });

未完待续...

原文地址:https://www.cnblogs.com/fanfan-90/p/12251671.html

时间: 2024-10-31 17:27:59

polly异常重试、熔断的相关文章

Polly+AspectCore实现熔断与降级机制

Polly+AspectCore实现熔断与降级机制 https://www.cnblogs.com/edisonchou/p/9159644.html 一.熔断.降级与AOP 1.1 啥是熔断? 在广义的解释中,熔断主要是指为控制股票.期货或其他金融衍生产品的交易风险,为其单日价格波动幅度规定区间限制,一旦成交价触及区间上下限,交易则自动中断一段时间("熔即断"),或就此"躺平"而不得超过上限或下限("熔而不断"). 而对于微服务来说,熔断就是我

使用Apache HttpClient 4.x进行异常重试

在进行http请求时,难免会遇到请求失败的情况,失败后需要重新请求,尝试再次获取数据. Apache的HttpClient提供了异常重试机制,在该机制中,我们可以很灵活的定义在哪些异常情况下进行重试. 重试前提 被请求的方法必须是幂等的:就是多次请求服务端结果应该是准确且一致的. 适合的方法:比如根据ID,修改人员姓名,无论请求多次结果都是一样,这就是幂等. 不适合的方法:比如减少账号50元,多次请求将多次扣减. 实现方式 想要实现异常重试,需要实现它提供的一个接口  HttpRequestRe

Python学习之异常重试解决方法详解

本文和大家分享的是在使用python 进行数据抓取中,异常重试相关解决办法,一起来看看吧,希望对大家学习python有所帮助. 在做数据抓取的时候,经常遇到由于网络问题导致的程序保存,先前只是记录了错误内容,并对错误内容进行后期处理. 原先的流程: defcrawl_page(url): pass deflog_error(url): pass url = "" try: crawl_page(url) except: log_error(url) 改进后的流程: attempts =

Spring错误异常重试框架guava-retrying

官网:https://github.com/rholder/guava-retrying Maven:https://mvnrepository.com/artifact/com.github.rholder/guava-retrying 下面示例是基于Spring Boot的,但是都可以用于Spring项目.目前最新版是2.0.0. 集成步骤: POM引入: <!-- https://mvnrepository.com/artifact/com.github.rholder/guava-ret

.NET Core微服务之基于Polly+AspectCore实现熔断与降级机制

一.熔断.降级与AOP 1.1 啥是熔断? 在广义的解释中,熔断主要是指为控制股票.期货或其他金融衍生产品的交易风险,为其单日价格波动幅度规定区间限制,一旦成交价触及区间上下限,交易则自动中断一段时间("熔即断"),或就此"躺平"而不得超过上限或下限("熔而不断"). 而对于微服务来说,熔断就是我们常说的"保险丝",意为当服务出现某些状况时,切断服务,从而防止应用程序不断地常识执行可能会失败的操作造成系统的"雪崩&q

Spring异常重试框架Spring Retry

Spring Retry支持集成到Spring或者Spring Boot项目中,而它支持AOP的切面注入写法,所以在引入时必须引入aspectjweaver.jar包. 快速集成的代码样例: @Configuration @EnableRetry public class Application { @Bean public Service service() { return new Service(); } } @Service class Service { @Retryable(Remo

异步异常重试函数-tryCall

在spa程序中我们遇到的网络环境和传统网页程序不同,因此思维也不能喝传统页面雷同,面对不稳定的网络环境,为了不使一点网络不稳定就造成程序错误,需要引入容错能力,tryCall就是这样一个函数,在出现异常的情况下可以进行重试,重试的时间间隔和总次数可以自定义 //当fn调用发生异常后间隔interval后尝试,最多尝试n次,fn(done,fail)1 var tryCall=function (fn, interval, n) { 2 return function (done, fail) {

openresty开发系列1--网关API架构及选型

微服务架构在项目中的应用越来越多,我们知道在微服务架构风格中,一个大应用被拆分成为了多个小的服务系统提供出来,这些小的系统他们可以自成体系,也就是说这些小系统可以拥有自己的数据库,框架甚至语言等,这些小系统通常以提供 Rest Api 风格的接口来被 H5, Android, IOS 以及第三方应用程序调用.但是在UI上进行展示的时候,我们通常需要在一个界面上展示很多数据,这些数据可能来自于不同的微服务中,举个例子.    在一个电商系统中,查看一个商品详情页,这个商品详情页包含商品的标题,价格

熔断降级(Polly)

熔断降级(Polly) https://www.cnblogs.com/qhbm/p/9224307.html 一. 什么是熔断降级 熔断就是"保险丝".当出现某些状况时,切断服务,从而防止应用程序不断地尝试执行可能会失败的操作给系统造成"雪崩",或者大量的超时等待导致系统卡死. 降级的目的是当某个服务提供者发生故障的时候,向调用方返回一个错误响应或者替代响应.举例子:调用联通接口服务器发送短信失败之后,改用移动短信服务器发送,如果移动短信服务器也失败,则改用电信短