1.

Net Core 中有一个被.Net 基金会认可的库 Polly,可以用来简化熔断降级的处理。主要功能:重试(Retry);断路器(Circuit-breaker);超时检测(Timeout);缓存(Cache);降级(FallBack);

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

介绍文章:https://www.cnblogs.com/CreateMyself/p/7589397.html

Nuget安装指令:Install-Package Polly -Version 6.1.2

  1. using System.Threading;
  2. using System.Threading.Tasks;
  3. using Daocfg;
  4. using Daocfg.Models.Account;
  5. using IBatisNet.DataMapper;
  6. using IBatisNet.DataMapper.Exceptions;
  7. using Polly;
  8. using Polly.CircuitBreaker;
  9. using Polly.Timeout;
  10.  
  11. class PolicyTest
  12. {
  13. /// <summary>
  14. /// mapper
  15. /// </summary>
  16. private static readonly ISqlMapper mapper;
  17.  
  18. private static readonly Dictionary<int, string> SqlErrorNumbers = new Dictionary<int, string>
  19. {
  20. { -, "超时时间已到。 超时时间在操作完成或服务器没有响应之前已过。" },
  21. { -, "在建立与服务器的连接时出错。 服务器不支持请求的协议 " },
  22. { , "在建立与服务器的连接时出错。无法打开到 SQL Server 的连接" },
  23. { , "在建立与服务器的连接时出错。无法打开到 SQL Server 的连接" },
  24. };
  25.  
  26. //触发熔断的连续错误阈值
  27. private static readonly int ExceptionsAllowedBeforeBreaking = ;
  28. //熔断的时间窗口
  29. private static readonly int DurationOfBreak = ;
  30.  
  31. private static readonly Policy PolicyInstance;
  32. static PolicyTest()
  33. {
  34. mapper = NewSqlMapper.Instance();
  35. Policy mainPolicy = Policy.Handle<TimeoutException>()
  36. .Or<TimeoutRejectedException>(ex => true)
  37. .Or<WebException>(ex => ex.Status == WebExceptionStatus.Timeout)
  38. .Or<SqlException>(ex => SqlErrorNumbers.Keys.Contains(ex.Number))
  39. .Or<DataMapperException>(ex => ex.Message.StartsWith("Unable to open connection", StringComparison.OrdinalIgnoreCase))
  40. .CircuitBreaker(ExceptionsAllowedBeforeBreaking, TimeSpan.FromSeconds(DurationOfBreak), (exception, span,
  41. arg3) =>
  42. {
  43.  
  44. }, (context) =>
  45. {
  46.  
  47. });
  48. Policy policytimeout = Policy.Timeout(, TimeoutStrategy.Pessimistic);
  49. PolicyInstance = mainPolicy.Wrap(policytimeout);
  50. }
  51.  
  52. public static void Excute()
  53. {
  54. for (int i = ; i <= ; i++)
  55. {
  56. Console.WriteLine("当前为第" + i.ToString() + "次请求...");
  57. try
  58. {
  59. PolicyInstance.Execute(() =>
  60. {
  61. Console.WriteLine("开始任务!");
  62. Thread.Sleep();
  63. var list = mapper.QueryForList<AccountDao>("qryAccount", new AccountFilter()
  64. {
  65. CustomerId = ,
  66. });
  67. Console.WriteLine("完成任务!帐号信息:" + String.Join(",", list));
  68. });
  69. }
  70. catch (BrokenCircuitException ex)
  71. {
  72. Console.Write("触发熔断!");
  73. }
  74. catch (Exception ex)
  75. {
  76. Console.WriteLine("execute出错" + ex.GetType().FullName);
  77. }
  78.  
  79. Thread.Sleep();
  80. }
  81. }
  82. }

.NET熔断之Polly的更多相关文章

  1. Consul+Ocelot+Polly在.NetCore中使用(.NET5)-Ocelot+Polly缓存、限流、熔断、降级

    相关文章 Consul+Ocelot+Polly在.NetCore中使用(.NET5)-Consul服务注册,服务发现 Consul+Ocelot+Polly在.NetCore中使用(.NET5)-网 ...

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

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.熔断.降级与AOP 1.1 啥是熔断? 在广义的解释中,熔断主要是指为控制股票.期货或其他金融衍生产品的交易风险,为其单日价格波动幅度 ...

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

    1.熔断降级的概念: 熔断:我这里有一根长度一米的钢铁,钢铁的熔点1000度(假设),现在我想用力把这根钢铁折弯,但是人的力有限达不到折弯的点,然后我使用火给钢铁加热,每隔一段时间我就会尝试一下是否能 ...

  4. ASP.NET Core 微服务初探[2]:熔断降级之Polly

    当我们从单体架构迁移到微服务模式时,其中一个比较大的变化就是模块(业务,服务等)间的调用方式.在以前,一个业务流程的执行在一个进程中就完成了,但是在微服务模式下可能会分散到2到10个,甚至更多的机器( ...

  5. (5)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- 熔断降级(Polly)

    一. 什么是熔断降级 熔断就是“保险丝”.当出现某些状况时,切断服务,从而防止应用程序不断地尝试执行可能会失败的操作给系统造成“雪崩”,或者大量的超时等待导致系统卡死. 降级的目的是当某个服务提供者发 ...

  6. (5).NET CORE微服务 Micro-Service ---- 熔断降级(Polly)

    一. 什么是熔断降级 熔断就是“保险丝”.当出现某些状况时,切断服务,从而防止应用程序不断地尝试执行可能会失败的操作给系统造成“雪崩”,或者大量的超时等待导致系统卡死. 降级的目的是当某个服务提供者发 ...

  7. 熔断 降级(polly)

    熔断 降级(polly) https://www.cnblogs.com/szlblog/p/9300845.html1.熔断降级的概念: 熔断:我这里有一根长度一米的钢铁,钢铁的熔点1000度(假设 ...

  8. 熔断降级(Polly)

    熔断降级(Polly) https://www.cnblogs.com/qhbm/p/9224307.html 一. 什么是熔断降级 熔断就是"保险丝".当出现某些状况时,切断服务 ...

  9. Polly+AspectCore实现熔断与降级机制

    Polly+AspectCore实现熔断与降级机制 https://www.cnblogs.com/edisonchou/p/9159644.html 一.熔断.降级与AOP 1.1 啥是熔断? 在广 ...

随机推荐

  1. oracle 建立表空间和用户

    .建立表空间, create tablespace "NETHRA" DATAFILE 'D:\DataBase\Oracle\iClass\iclass\iclass.DBF' ...

  2. dns记录类型(转)

    NS:(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串.通过主机名,最终 ...

  3. Linux 基础教程 30-tcpdump命令-2

        在上一节讲了一些tcpdump常用功能,本期我们继续学习tcpdump后续功能. 流量过滤     tcpdump不仅支持单个过滤表达式过滤,也还支持多个过滤表达式.但需要注意的是传入的过滤表 ...

  4. android事件分发

    1). android对事件分发的顺序为:Activity--->PhoneWindow--->DecorView--->yourView; 2). android控件对事件处理的优 ...

  5. 类数组对象 实参对象arguments

    先看实参对象arguments 之前对argument有点印象,知道它不是真正的数组,但也可以arguments[0]和arguments.length.今天详细的记录一下. js的默认行为:省略的实 ...

  6. ZOJ3714:Java Beans

    There are N little kids sitting in a circle, each of them are carrying some java beans in their hand ...

  7. Atom打造优雅的MarkDown 编辑器

    1.下载Atom https://atom.io/ 2.安装Atom 双击自动安装,会默认安装到C盘,无法修改. 3.安装simplified-chinese-menu 插件 这是一个可以将软件汉化的 ...

  8. JS DOM对象控制HTML元素详解

    JS DOM对象控制HTML元素详解 方法: getElementsByName()  获取name getElementsByTagName()  获取元素 getAttribute()  获取元素 ...

  9. linux中使用unzip命令中文乱码解决办法

    今天在使用unzip进行解压缩文件时,发现解压出的文件中文乱码,最后使用如下命令解决: unzip -O CP936 xxx.zip 特此记录一下.

  10. 初学python之路-day15

    一.生成器send方法 # send的工作原理 # 1.send发送信息给当前停止的yield # 2.再去调用__next__()方法,生成器接着往下指向,返回下一个yield值并停止 # 案例: ...