关于Polly

Polly是一个基于.NET的弹性及瞬态故障处理库,允许开发人员以顺畅及线程安全的方式执行重试(Retry)、断路(Circuit Breaker)、超时(Timeout)、

隔离(Bulkhead Isolation)和回退策略(Fallback ).Polly适用于 .NET 4.0, .NET 4.5 和.NET Standard 1.1。

以上是官方文档对polly库的介绍。

polly的介绍中有个很关键的词是瞬态故障,这个词也很好的诠释了Polly使用的一个背景.瞬态故障,就是指我们的程序在运行当中可能会发生故障,

这些故障包含程序运行中的异常、返回结果不符等。弹性是指Polly在应对这些故障时具有灵活性,且其提供的策略也可以很灵活的组合在一起使用。

Polly的使用

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

Install-Package Polly

方式2:在github中下载Polly源码

https://github.com/App-vNext/Polly

Polly策略

一、重试(Retry)

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

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

    Polly的所有策略使用都支持链式调用。

Polly重试策略的使用分为三个步骤

1、指定需要处理的异常

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

2、指定重试次数和监控重试

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

3、指定执行的任务

指定执行的任务是整个异常重试的核心和监控对象,Execute支持多种重载.。

重试策略支持异步任务

public async Task PollyStudy()

{

int num = await Policy

.Handle<Exception>()

.RetryAsync(2, (ex, count, context) =>

{

Console.WriteLine($"重试次数{count},异常{ex.Message}");

})

.ExecuteAsync<int>(() =>

{

return GetNum();

});

}

public async Task<int> GetNum()

{

await Task.Delay(10000);

return 1;

}

二、超时(Timeout)

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

不会再去等待结果

超时策略最基本的设置:

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

三、熔断(Circuit-breaker)

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

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

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

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

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

四、回退(Fallback)

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

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

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

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

五、隔板隔离策略

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

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

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

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

六、缓存策略

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

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

ISyncCacheProvider cacheProvider = new StubCacheProvider();
            Func<Context, string> cacheKeyStrategy = null;
            Action action = () => Policy.Cache(cacheProvider, TimeSpan.MaxValue, cacheKeyStrategy);

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

七、策略包装策略

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

NoOpPolicy policy0 = Policy.NoOp();
           NoOpPolicy policy1 = Policy.NoOp();
           NoOpPolicy policy2 = Policy.NoOp();
           PolicyWrap policyWrap = Policy.Wrap(policy0, policy1, policy2);

  

总结

上面简单介绍了polly七大策略和其基本配置,Polly实际功能很强大,是一个很值得仔细学习的库.

后面会详细介绍Polly的几大策略以及在实际项目中的一个应用

相关文章:

  • .NET 开源项目 Polly 介绍

  • HttpClientFactory系列二:集成Polly处理瞬态故障

  • 在 .NET Core 中结合 HttpClientFactory 使用 Polly(上篇)

  • 在 .NET Core 中结合 HttpClientFactory 使用 Polly(中篇)

  • 在 .NET Core 中结合 HttpClientFactory 使用 Polly(下篇)

  • AspNetCore 基于AOP实现Polly的使用

  • 使用.NetCore 控制台演示 熔断 降级(polly)

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

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


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

c# 弹性和瞬态故障处理库Polly 学习相关推荐

  1. 弹性和瞬态故障处理库Polly之重试策略

    弹性和瞬态故障处理库Polly 源码及参考见文章底部 Nuget中Polly库的引用: Install-Package Polly 以下策略调用的方法: 详细代码见 public static int ...

  2. 弹性和瞬态故障处理库Polly介绍

    前言 本节我们来介绍一款强大的库Polly,Polly是一种.NET弹性和瞬态故障处理库,允许我们以非常顺畅和线程安全的方式来执诸如行重试,断路,超时,故障恢复等策略. Polly针对对.NET 4. ...

  3. 已被.NET基金会认可的弹性和瞬态故障处理库Polly介绍

    前言 本节我们来介绍一款强大的库Polly,Polly是一种.NET弹性和瞬态故障处理库,允许我们以非常顺畅和线程安全的方式来执诸如行重试,断路,超时,故障恢复等策略. Polly针对对.NET 4. ...

  4. c# 弹性和瞬态故障处理库Polly

    关于polly polly文档中对自己介绍的原文是: Polly is a .NET resilience and transient-fault-handling library that allo ...

  5. 开源服务容错处理库Polly使用文档

    在进入SOA之后,我们的代码从本地方法调用变成了跨机器的通信.任何一个新技术的引入都会为我们解决特定的问题,都会带来一些新的问题.比如网络故障.依赖服务崩溃.超时.服务器内存与CPU等其它问题.正是因 ...

  6. ASP VNext 开源服务容错处理库Polly

    背景 Polly是一个.NET弹性和瞬态故障处理库,允许开发人员以流畅和线程安全的方式表达诸如重试,断路器,超时,隔离头和回退之类的策略. Polly面向.NET Standard 1.1(覆盖范围: ...

  7. python内置库之学习configparser库(一)

    python内置库之学习configparser库(一) 1.引言 ini文件简介 [节] 键=值 注:节不能重复出现 2.自己封装了一个增删改查的类,可以参考一下 import configpars ...

  8. go标准库的学习-crypto/sha1

    参考:https://studygolang.com/pkgdoc 导入方式: import "crypto/sha1" sha1包实现了SHA1哈希算法,参见RFC 3174. ...

  9. 日志库EasyLogging++学习系列(10)—— 日志文件滚动

    在很多应用场合,我们是需要实现日志文件滚动的,特别是在一些长期运行的服务器程序中,如果把所有的日志都记录在一个文件之中,势必会造成日志文件越来越大.当日志内容很多的时候,万一哪天突然需要查询某个日志信 ...

最新文章

  1. Python学习笔记(六)
  2. apache启服务命令_apache_cgi绕过disable_functions
  3. Dubbo环境搭建-ZooKeeper注册中心
  4. python 混淆矩阵_绘制混沌矩阵
  5. NoSQL架构实践(三)——以NoSQL为缓存
  6. 谷歌Auto-DeepLab:自动搜索图像语义分割架构算法开源实现
  7. 利用OpenCV和C++实现由RGB图像转化为灰度图,再将灰度图转化为二值图的程序
  8. 迅雷BT下载电影99.9%不动原地循环解决方案
  9. 一串数字中有两个只出现一次的数字其余都是成对相同,求这两个数
  10. Charles proxy tools 移动开发调试
  11. 创建分布式爬虫的步骤
  12. Google桌面搜索和百度硬盘搜索索引停滞的原因
  13. 【ANSYS命令流】模型的建立相关命令(一)
  14. Android提取分区镜像命令,Android取证:使用ADB和DD对文件系统做镜像
  15. 转 26款 网络会议/视频会议开源软件
  16. 利用MATLAB视频函数工具箱的…
  17. 用Date计算日期相差多少天
  18. linux运维必备178个命令
  19. Java项目:ssm+mysql医药进销存系统
  20. python--破解滑动验证码

热门文章

  1. 最大连续子数组和与JUnit测试
  2. 如何在一小时内更新100篇文章?-Evernote Sync插件介绍
  3. python学习笔记 --- 随机数进阶
  4. Scala具体解释---------Scala是什么?可伸展的语言!
  5. eclipse创建maven多模块项目(单个类似)
  6. serialization机制
  7. Oracle行列转换的思考与总结
  8. MYSQ 查看 2 进制日志
  9. 为什么要实施服务器虚拟化
  10. [翻译]Go与C#对比 第三篇:编译、运行时、类型系统、模块和其它的一切