基于netcore的微服务——Polly(2)
Polly
- 一、什么是熔断降级
- 1.熔断
- 2.降级
- 二、Polly简介
- 1.功能
- 2.组成
- (1)故障
- (2)动作
- 三、实例源码
- 引入包
一、什么是熔断降级
1.熔断
熔断就是“保险丝“,当初夏四年某种情况时,切断服务,防止应用程序不断得尝试执行失败得操作给系统造成雪崩,或者大量得超时等待,使系统卡死。
2.降级
目的是使某个服务提供者发生故障得时候,向调用方返回一个错误得响应或者替代响应。
例如:服务A失败,改用服务B,B失败,该为服务C,C失败,改为缓存加载,如果还失败,从本地加载,再失败就返回失败,逐层降级处理。
二、Polly简介
.Net Core中被.Net基金会认可得库,用来简化,熔断降级处理。
1.功能
重试(retry)
断路器(Circuit-breaker)
超时检测(Timeout)
降级(FallBack)
缓存不好用,所以不做学习
缓存(Cache)
2.组成
polly得策略又”故障“和”动作“两部分组成
(1)故障
包括异常,超时
(2)动作
包括FallBack(降级),重试(retry),熔断(Circuit-breaker)等
三、实例源码
引入包
<PackageReference Include="Polly" Version="6.0.1" />
using Polly;
using Polly.Timeout;
using System;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;namespace pollytest1
{internal class Program{static void Main(string[] args){#region 降级策略定义故障//Policy<string> policy = Policy<string>.Handle<Exception>(ex=>ex.Message =="数据错误").// //出现故障后得处理// //降级处理// Fallback(() =>// {// Console.WriteLine("fallback");// return "降级后给你得值";// });正真得业务逻辑//string result = policy.Execute(() =>//{// Console.WriteLine("开始执行");// throw new ArgumentException();// Console.WriteLine("执行结束");// return "正常值";//});//Console.WriteLine(result);#endregion#region 重试策略//try//{// Policy policy = Policy.Handle<Exception>()// //重试一次// .Retry();// //重试三次// //.Retry(3);// policy.Execute(() =>// {// Console.WriteLine("开始任务");// if (DateTime.Now.Second % 10 != 0)// {// throw new Exception("出错");// }// Console.WriteLine("完成任务");// });//}//catch//{// Console.WriteLine("出现未捕获得异常");//}#endregion#region 策略得封装 可以将多个策略合并在一起使用//Policy policyRetry = Policy.Handle<Exception>()// .Retry(3);//Policy policeFallback = Policy.Handle<Exception>()// .Fallback(() =>// {// Console.WriteLine("fallback"); // }); wrap包裹,降级策略包裹了重试策略,先重试三次,再降级//Policy policy = policeFallback.Wrap(policyRetry);//policy.Execute(() =>//{// Console.WriteLine("开始任务");// if (DateTime.Now.Second % 10 != 0)// {// throw new Exception("出错");// }// Console.WriteLine("完成任务");//});#endregion#region 超时策略 :避免接口长期没有响应造成系统卡死超时策略,如果规定时间没有响应,就抛出异常//Policy policytimeout = Policy.Timeout(3, TimeoutStrategy.Pessimistic);降级策略,出现异常,则实现降级//Policy policyFallback = Policy.Handle<TimeoutRejectedException>()// .Fallback(() =>// {// Console.WriteLine("降级");// });降级策略包裹超时策略//Policy policy = policyFallback.Wrap(policytimeout);//policy.Execute(() => //{// Console.WriteLine("开始任务");// Thread.Sleep(5000);// Console.WriteLine("任务完成");//});#endregion#regionTest1();static async Task Test1(){Policy<byte[]> policy = Policy<byte[]>.Handle<Exception>().FallbackAsync(async c =>{Console.WriteLine("执行出错");return new byte[0];},async r=>{Console.WriteLine(r.Exception);});policy = policy.WrapAsync(Policy.TimeoutAsync(20, TimeoutStrategy.Pessimistic,async (context,timesapn,task)=>{Console.WriteLine("timeout");}));var bytes = await policy.ExecuteAsync(async () =>{Console.WriteLine("开始任务");HttpClient httpClient = new HttpClient();var result = await httpClient.GetByteArrayAsync("https://csdnnews.blog.csdn.net/article/details/124813425?spm=1000.2115.3001.5926");Console.WriteLine("完成任务");return result;});Console.WriteLine("bytes长度"+bytes.Length);}#endregionConsole.ReadKey();}}
}
基于netcore的微服务——Polly(2)相关推荐
- 通过Dapr实现一个简单的基于.net的微服务电商系统(十一)——一步一步教你如何撸Dapr之自动扩/缩容...
上一篇我们讲到了dapr提供的bindings,通过绑定可以让我们的程序轻装上阵,在极端情况下几乎不需要集成任何sdk,仅需要通过httpclient+text.json即可完成对外部组件的调用,这样 ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(六)——一步一步教你如何撸Dapr之Actor服务...
我个人认为Actor应该是Dapr里比较重头的部分也是Dapr一直在讲的所谓"stateful applications"真正具体的一个实现(个人认为),上一章讲到有状态服务可能很 ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(五)——一步一步教你如何撸Dapr之状态管理...
状态管理和上一章的订阅发布都算是Dapr相较于其他服务网格框架来讲提供的比较特异性的内容,今天我们来讲讲状态管理. 目录: 一.通过Dapr实现一个简单的基于.net的微服务电商系统 二.通过Dapr ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(四)——一步一步教你如何撸Dapr之订阅发布...
之前的章节我们介绍了如何通过dapr发起一个服务调用,相信看过前几章的小伙伴已经对dapr有一个基本的了解了,今天我们来聊一聊dapr的另外一个功能--订阅发布 目录: 一.通过Dapr实现一个简单的 ...
- 基于 Kubernetes 的微服务项目设计与实现
作者:xiaojiaqi 来源:https://github.com/xiaojiaqi/deploy-microservices-to-a-Kubernetes-cluster 随着互联网的发展,后 ...
- 日10亿级处理,基于云的微服务架构
德比软件:基于云的微服务架构 作者:朱攀,德比软件架构师,同济大学研究生,2007 年 2 月加入德比软件(DerbySoft),拥有 10 年以上的软件架构和开发经验.目前主要负责公司数据对接平台的 ...
- Aooms_基于SpringCloud的微服务基础开发平台实战_002_工程构建
为什么80%的码农都做不了架构师?>>> 一.关于框架更名的一点说明 最近在做年终总结.明年规划.还有几个项目需要了结.出解决方案,事情还比较多,死了不少脑细胞,距离上一篇文章 ...
- 基于 Docker 的微服务架构实践
http://dockone.io/article/4887 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 DevOps,也见证了 Do ...
- 基于thrift的微服务框架
前一阵开源过一个基于spring-boot的rest微服务框架,今天再来一篇基于thrift的微服务加框,thrift是啥就不多了,大家自行百度或参考我之前介绍thrift的文章, thrift不仅支 ...
最新文章
- PyQt5显示一个空白的窗口
- webstorm卡顿问题
- latex 无穷_《天龙3D》新资料片“骑乐无穷”即将上线
- Java面试题18 牛客 假定Base b = new Derived();
- 哈佛大学计算机科学专,哈佛大学计算机科学专业
- 谈一谈Java编程开发中虚拟机的内存区域划分?猿们怎么看?
- VulnHub靶机系列:Os-ByteSec
- try、catch和finally中都有return语句的情况
- 聚类算法教程(3):层次聚类算法Hierarchical Clustering Algorithms
- Android 使用WakeLock
- Android架构师之路-oop
- Transaction事务
- 【FPGA算法加速】FPGA编程开发环境:Vivado安装教程详细说明
- 阿里云发布智慧书店解决方案 联手新华书店总店落地首个“城市书房”
- 剖析Linux的守护神
- 在excel中如何筛选重复数据_高级筛选,让重复的数据记录无处可逃
- flex布局的应用 —— 模仿携程移动端的首页
- 无线路由器桥接(以不同品牌为例tplink和fast)
- matlab 画非线性曲线,MATLAB实例:非线性曲线拟合
- EMAIL 如何发送给多人,如何CC,BCC?