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)相关推荐

  1. 通过Dapr实现一个简单的基于.net的微服务电商系统(十一)——一步一步教你如何撸Dapr之自动扩/缩容...

    上一篇我们讲到了dapr提供的bindings,通过绑定可以让我们的程序轻装上阵,在极端情况下几乎不需要集成任何sdk,仅需要通过httpclient+text.json即可完成对外部组件的调用,这样 ...

  2. 通过Dapr实现一个简单的基于.net的微服务电商系统(六)——一步一步教你如何撸Dapr之Actor服务...

    我个人认为Actor应该是Dapr里比较重头的部分也是Dapr一直在讲的所谓"stateful applications"真正具体的一个实现(个人认为),上一章讲到有状态服务可能很 ...

  3. 通过Dapr实现一个简单的基于.net的微服务电商系统(五)——一步一步教你如何撸Dapr之状态管理...

    状态管理和上一章的订阅发布都算是Dapr相较于其他服务网格框架来讲提供的比较特异性的内容,今天我们来讲讲状态管理. 目录: 一.通过Dapr实现一个简单的基于.net的微服务电商系统 二.通过Dapr ...

  4. 通过Dapr实现一个简单的基于.net的微服务电商系统(四)——一步一步教你如何撸Dapr之订阅发布...

    之前的章节我们介绍了如何通过dapr发起一个服务调用,相信看过前几章的小伙伴已经对dapr有一个基本的了解了,今天我们来聊一聊dapr的另外一个功能--订阅发布 目录: 一.通过Dapr实现一个简单的 ...

  5. 基于 Kubernetes 的微服务项目设计与实现

    作者:xiaojiaqi 来源:https://github.com/xiaojiaqi/deploy-microservices-to-a-Kubernetes-cluster 随着互联网的发展,后 ...

  6. 日10亿级处理,基于云的微服务架构

    德比软件:基于云的微服务架构 作者:朱攀,德比软件架构师,同济大学研究生,2007 年 2 月加入德比软件(DerbySoft),拥有 10 年以上的软件架构和开发经验.目前主要负责公司数据对接平台的 ...

  7. Aooms_基于SpringCloud的微服务基础开发平台实战_002_工程构建

    为什么80%的码农都做不了架构师?>>>    一.关于框架更名的一点说明 最近在做年终总结.明年规划.还有几个项目需要了结.出解决方案,事情还比较多,死了不少脑细胞,距离上一篇文章 ...

  8. 基于 Docker 的微服务架构实践

    http://dockone.io/article/4887 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 DevOps,也见证了 Do ...

  9. 基于thrift的微服务框架

    前一阵开源过一个基于spring-boot的rest微服务框架,今天再来一篇基于thrift的微服务加框,thrift是啥就不多了,大家自行百度或参考我之前介绍thrift的文章, thrift不仅支 ...

最新文章

  1. PyQt5显示一个空白的窗口
  2. webstorm卡顿问题
  3. latex 无穷_《天龙3D》新资料片“骑乐无穷”即将上线
  4. Java面试题18 牛客 假定Base b = new Derived();
  5. 哈佛大学计算机科学专,哈佛大学计算机科学专业
  6. 谈一谈Java编程开发中虚拟机的内存区域划分?猿们怎么看?
  7. VulnHub靶机系列:Os-ByteSec
  8. try、catch和finally中都有return语句的情况
  9. 聚类算法教程(3):层次聚类算法Hierarchical Clustering Algorithms
  10. Android 使用WakeLock
  11. Android架构师之路-oop
  12. Transaction事务
  13. 【FPGA算法加速】FPGA编程开发环境:Vivado安装教程详细说明
  14. 阿里云发布智慧书店解决方案 联手新华书店总店落地首个“城市书房”
  15. 剖析Linux的守护神
  16. 在excel中如何筛选重复数据_高级筛选,让重复的数据记录无处可逃
  17. flex布局的应用 —— 模仿携程移动端的首页
  18. 无线路由器桥接(以不同品牌为例tplink和fast)
  19. matlab 画非线性曲线,MATLAB实例:非线性曲线拟合
  20. EMAIL 如何发送给多人,如何CC,BCC?

热门文章

  1. python3 urlparse_Python3的URL解析库urlparse
  2. PC QQ密码登录总是要图形验证解决方法
  3. Boltzmann机算法(模拟退火算法)(郑捷 著)
  4. 小程序 微信统计表格_微信小程序图表插件(wx-charts)
  5. python中文路径与英文路径的拼接
  6. 《从Paxos到Zookeeper 分布式一致性原理与实践》
  7. 遍历的几种方式及用法
  8. html在线表单生成器,表单生成器.html
  9. Spring+Quartz制作定时祝福短信
  10. ParameterizedType详解