码迷,mamicode.com
首页 > Windows程序 > 详细

c# polly学习

时间:2018-10-31 23:25:38      阅读:1547      评论:0      收藏:0      [点我收藏+]

标签:handle   write   hat   console   developer   前置   pre   microsoft   任务   

    最近在项目当中使用到了开源项目polly的异常重试策略,在使用当中发现polly是个功能很强大的项目,

    于是对其提供的几种策略进行学习.

    polly的github地址为:https://github.com/App-vNext/Polly

  关于polly

   polly文档中对自己介绍的原文是:

   Polly is a .NET resilience and transient-fault-handling library that allows developers to express policies such as Retry,

   Circuit Breaker, Timeout, Bulkhead Isolation, and Fallback in a fluent and thread-safe manner.  

   从这段话我们可以知道polly项目是一个基于.NET开发的用来处理瞬故障的库,我们可以借助这个库以线程安全的形式实现

   重试、断路、超时、隔离和回退策略.

  Polly七大策略 

   Polly的使用方式是在Nuget中下载安装包 Polly,安装成功即可使用

   1.重试策略

      异常重试是最常使用的一个策略,其功能是当我们执行的方法体发生异常时,可以按照我们指定的次数进行重试

           Policy
          .Handle<NullReferenceException>()   //指定需要重试的异常类型 
          .Retry(2,(ex,count,context)=> {     //指定发生异常重试的次数
              Console.WriteLine($"重试次数{count},异常{ex.Message}");
          })                                          
          .Execute(() => Console.Write("execute method!"));    //要执行的方法

     如上代码所示,异常重试的使用支持链式编程,且使用方式分为三个步骤:

     (1) 指定需要处理的异常

          可以指定捕获执行的任务的异常类型,若执行任务的异常类型满足指定异常,那么重试机制将会生效

     (2)指定重试次数和监控重试

        指定整个执行过程中需要重试多少次,且可以监控每次的重试信息,比如重试次数  异常以及重试的上下文信息

    (3)指定执行的任务

        指定执行的任务是整个异常重试的核心和监控对象,Execute支持多种重载,也可以使用ExecuteAsync支持异步

        任务执行.

       后续会对重试的用法和实现进行详细的分析.

   2.超时策略

      超时策略主要用于对任务执行的执行时长监控,若任务执行超出指定执行时长,那么我们就认为这次任务执行是失败的,

     不会再去等待结果

      

            Policy
            .Timeout(10, (context, timeSpan, task) =>
           {
                Console.WriteLine("1");
            });

3.熔断策略

   熔断在这里的含义在执行某个任务时,多次重试依然出现超时或则异常,且重试的次数已经超过了系统设定上限.

   那么就中断当前的执行,快速响应失败信息给用户,等待一段时间再进行恢复,继续执行.

   

var breakerPlocy = Policy.Handle<Exception>()     //指定异常
                         .CircuitBreaker(5, TimeSpan.FromSeconds(30),               //设置5次阀值,中断30秒
                         onBreak: (ex, timeSpan) => { Console.WriteLine("onBreak"); }, //中断回调
                         onReset: () => { Console.WriteLine("onReset"); });            //重置回调

  熔断的基本策略设置如上代码所示,上面的代码可以解析为当某个任务超过5次异常时,我们进行中断处理,等待30秒后再次继续.我们设置了

  中断回调和重启回调函数,可以记录当中的执行信息.

  4.回退策略

   回退策略的前置条件是当我们的操作注定会失败时,我们就需要有一个合理的返回信息来替代失败信息,也就是提供一个备用方案,

   从而能对我们的失败操作进行挽救.

     Policy
        .Handle<Exception>()                 
        .Fallback(fallbackAction: () => { }, onFallback: (ex) => { });           

  回退策略的基本设置如上所示,我们可以定义备用的返回信息,同时可以定义回调

  5.隔板隔离策略

 隔板隔离的前置条件是当进程出现故障时,多个失败一直在主机中对资源一直占用。下游系统故障也可能导致上游系统的故障,

 这些风险都可能导致系统产生严重的后果.而隔板隔离策略可以隔离有相互影响的操作,将受管制的草需哦限制在一个固定的资源池中

 

            Policy.Bulkhead(10, 15, (context) => { });

 指定最大的线程数,和正在排队的队列数,若执行被拒绝,则执行回调.

 

6.缓存策略

  缓存策略的前置条件是我们的数据更新周期较长且使用频繁,我们可以首次加载这些数据时将这些数据缓存起来,

  如果数据已经存在那么我们直接从缓存中读取.

  缓存策略在某些情况下简化我们的缓存实现是很有帮助的.

  后续会对缓存策略的实现和用法进行详细的分析.

7.策略包装策略

  策略包装策略的前置条件是不同的异常需要不同的策略,也就是需要我们弹性的使用策略来应对不同的异常信息.

 

未完,待续

   

 

 

    

c# polly学习

标签:handle   write   hat   console   developer   前置   pre   microsoft   任务   

原文地址:https://www.cnblogs.com/xxue/p/9886394.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!