• 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("没有姓名参数");
                });

    未完待续...

  • 相关阅读:
    吴恩达机器学习笔记 —— 19 应用举例:照片OCR(光学字符识别)
    吴恩达机器学习笔记 —— 17 推荐系统
    吴恩达机器学习笔记 —— 13 支持向量机
    吴恩达机器学习笔记 —— 15 降维
    SAP MM 无价值物料管理的一种实现思路
    第一节 电商
    e3mall_day09
    activemq整合spring的配置
    log4j简介
    ActiveMQ的入门使用
  • 原文地址:https://www.cnblogs.com/fanfan-90/p/12251671.html
Copyright © 2020-2023  润新知