.NET中弹性和瞬时处理库Polly的使用详解.docx

.NET中弹性和瞬时处理库Polly的使用详解.docx

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

.NET中弹性和瞬时处理库Polly的使用详解

目录写在前面代码实现调用示例

写在前面

Polly是一个.NET弹性和瞬态故障处理库,允许开发人员以Fluent和线程安全的方式来实现重试、断路、超时、隔离和回退策略。

Polly的七种策略介绍

重试(Retry):当出现故障时自动进行重试

断路(Circuit-breaker):当系统遇到严重问题时,快速回馈失败比让用户/调用者等待要好,限制系统出错的体量,有助于系统恢复。

超时(Timeout):当系统超过一定时间的等待,我们就几乎可以判断不可能会有成功的结果,直接去干别的事情。

隔离(BulkheadIsolation):当系统的一处出现故障时,可能促发多个失败的调用,很容易耗尽主机的资源(如CPU)。下游系统出现故障可能导致上游的故障的调用,甚至可能蔓延到导致系统崩溃。所以要将可控的操作限制在一个固定大小的资源池中,以隔离有潜在可能相互影响的操作。

回退(Fallback):有些错误无法避免,就要有备用的方案。这个就像浏览器不支持一些新的CSS特性就要额外引用一个polyfill一样。一般情况,当无法避免的错误发生时,我们要有一个合理的返回来代替失败。

缓存(Cache):一般我们会把频繁使用且不会怎么变化的资源缓存起来,以提高系统的响应速度。如果不对缓存资源的调用进行封装,那么我们调用的时候就要先判断缓存中有没有这个资源,有的话就从缓存返回,否则就从资源存储的地方(比如数据库)获取后缓存起来,再返回,而且有时还要考虑缓存过期和如何更新缓存的问题。Polly提供了缓存策略的支持,使得问题变得简单。

策略包(PolicyWrap):一种操作会有多种不同的故障,而不同的故障处理需要不同的策略。这些不同的策略必须包在一起,作为一个策略包,才能应用在同一种操作上。这就是文章开头说的Polly的弹性,即各种不同的策略能够灵活地组合起来。

通过NuGet安装Polly类库:

官方项目地址:/App-vNext/Polly

代码实现

///summary

///FallBack=当出现故障,则进入降级动作

////summary

publicstaticvoidCase1()

ISyncPolicypolicy=Policy.HandleArgumentException()

.Fallback(()=

Console.WriteLine(Erroroccured);

policy.Execute(()=

Console.WriteLine(JobStart);

thrownewArgumentException(HelloPolly!);

Console.WriteLine(JobEnd);

///summary

///Retry=重试

////summary

publicstaticvoidCase2()

ISyncPolicypolicy=Policy.HandleException().Retry(3);

policy.Execute(()=

Console.WriteLine(JobStart);

if(DateTime.Now.Second%10!=0)

thrownewException(Specialerroroccured);

Console.WriteLine(JobEnd);

catch(Exceptionex)

Console.WriteLine(Theresoneunhandledexception:+ex.Message);

///summary

///CircuitBreaker=短路保护

////summary

publicstaticvoidCase3()

//Stopfor10safterretry6times

ISyncPolicypolicy=Policy.HandleException()

.CircuitBreaker(6,TimeSpan.FromSeconds(10));

while(true)

policy.Execute(()=

Console.WriteLine(JobStart);

thrownewExc

文档评论(0)

152****4498 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档