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. Flash的不同位宽与CPU地址线的接线问题?

    一般Flash都有8.16.32等这些不同的位宽,当然说白了就是Flash的数据线位数. 在Flash与CPU的地址线的连接问题时:不同位宽的有不同的连接方法: 一般是:位宽为8时CPU的ADDR0与 ...

  2. 如何使用Word2016或Office365中的word撰写博客并发布

    目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...

  3. (最小生成树)Eddy's picture -- hdu -- 1162

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1162 Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  4. HRBUST1311 火影忍者之~忍者村 2017-03-06 16:06 106人阅读 评论(0) 收藏

    火影忍者之-忍者村   忍者村是忍者聚居的村子,相等于国家的军事力量.绝大部分村民都是忍者,有一些忍者会在村内开设书店.餐厅等,不过大部分忍者都是为村子执行任务的忍者,以赚取酬劳,并于战时为国家出战. ...

  5. Vivado安装教程

    Vivado的各个版本的安流程其实都差不多,本教程用Vivado2016.4为例进行安装,同样适用于之前和之后的各个版本. 下载好安装包后打开,双击xsetup.exe运行安装程序 弹出的窗口,提示现 ...

  6. [leetcode] 12. Merge Sorted Array

    这道题的无聊之处在于题目其实给了一些很奇怪的测试用例.比如他会给一些空的数组来,但是这个是不科学的,因为在C++中不允许定义一个空的列表,我们用的又不是那种糙又快的python,所以在这里我遇到了一些 ...

  7. ie11 兼容的问题

    碰到一个问题 下拉列表点不了. 测试后,只在ie11下有这个问题. 先是在head 加<meta http-equiv=”X-UA-Compatible” content="IE=8& ...

  8. Linux Guard Service - 进程分裂与脱离

    进程分裂更名 void set_ps_name(char *name) { prctl(PR_SET_NAME, name); } 修改进程长名称 备份进程环境变量空间 for (i = 1; i & ...

  9. C#中字段、属性、只读、构造函数赋值、反射赋值的相关

    C#中字段.属性和构造函数赋值的问题 提出问题 首先提出几个问题: 1.如何实现自己的注入框架? 2.字段和自动属性的区别是什么? 3.字段和自动属性声明时的直接赋值和构造函数赋值有什么区别? 4.为 ...

  10. 初学Ionic

    官网 https://ionicframework.com/ 如连接所示,可跳转到该前端框架的官网,在这里提供了两种方式可供大家学习: Code with the CLI Design with lo ...