.NET熔断之Polly
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
- using System.Threading;
- using System.Threading.Tasks;
- using Daocfg;
- using Daocfg.Models.Account;
- using IBatisNet.DataMapper;
- using IBatisNet.DataMapper.Exceptions;
- using Polly;
- using Polly.CircuitBreaker;
- using Polly.Timeout;
- class PolicyTest
- {
- /// <summary>
- /// mapper
- /// </summary>
- private static readonly ISqlMapper mapper;
- private static readonly Dictionary<int, string> SqlErrorNumbers = new Dictionary<int, string>
- {
- { -, "超时时间已到。 超时时间在操作完成或服务器没有响应之前已过。" },
- { -, "在建立与服务器的连接时出错。 服务器不支持请求的协议 " },
- { , "在建立与服务器的连接时出错。无法打开到 SQL Server 的连接" },
- { , "在建立与服务器的连接时出错。无法打开到 SQL Server 的连接" },
- };
- //触发熔断的连续错误阈值
- private static readonly int ExceptionsAllowedBeforeBreaking = ;
- //熔断的时间窗口
- private static readonly int DurationOfBreak = ;
- private static readonly Policy PolicyInstance;
- static PolicyTest()
- {
- mapper = NewSqlMapper.Instance();
- Policy mainPolicy = Policy.Handle<TimeoutException>()
- .Or<TimeoutRejectedException>(ex => true)
- .Or<WebException>(ex => ex.Status == WebExceptionStatus.Timeout)
- .Or<SqlException>(ex => SqlErrorNumbers.Keys.Contains(ex.Number))
- .Or<DataMapperException>(ex => ex.Message.StartsWith("Unable to open connection", StringComparison.OrdinalIgnoreCase))
- .CircuitBreaker(ExceptionsAllowedBeforeBreaking, TimeSpan.FromSeconds(DurationOfBreak), (exception, span,
- arg3) =>
- {
- }, (context) =>
- {
- });
- Policy policytimeout = Policy.Timeout(, TimeoutStrategy.Pessimistic);
- PolicyInstance = mainPolicy.Wrap(policytimeout);
- }
- public static void Excute()
- {
- for (int i = ; i <= ; i++)
- {
- Console.WriteLine("当前为第" + i.ToString() + "次请求...");
- try
- {
- PolicyInstance.Execute(() =>
- {
- Console.WriteLine("开始任务!");
- Thread.Sleep();
- var list = mapper.QueryForList<AccountDao>("qryAccount", new AccountFilter()
- {
- CustomerId = ,
- });
- Console.WriteLine("完成任务!帐号信息:" + String.Join(",", list));
- });
- }
- catch (BrokenCircuitException ex)
- {
- Console.Write("触发熔断!");
- }
- catch (Exception ex)
- {
- Console.WriteLine("execute出错" + ex.GetType().FullName);
- }
- Thread.Sleep();
- }
- }
- }
.NET熔断之Polly的更多相关文章
- Consul+Ocelot+Polly在.NetCore中使用(.NET5)-Ocelot+Polly缓存、限流、熔断、降级
相关文章 Consul+Ocelot+Polly在.NetCore中使用(.NET5)-Consul服务注册,服务发现 Consul+Ocelot+Polly在.NetCore中使用(.NET5)-网 ...
- .NET Core微服务之基于Polly+AspectCore实现熔断与降级机制
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.熔断.降级与AOP 1.1 啥是熔断? 在广义的解释中,熔断主要是指为控制股票.期货或其他金融衍生产品的交易风险,为其单日价格波动幅度 ...
- 使用.NetCore 控制台演示 熔断 降级(polly)
1.熔断降级的概念: 熔断:我这里有一根长度一米的钢铁,钢铁的熔点1000度(假设),现在我想用力把这根钢铁折弯,但是人的力有限达不到折弯的点,然后我使用火给钢铁加热,每隔一段时间我就会尝试一下是否能 ...
- ASP.NET Core 微服务初探[2]:熔断降级之Polly
当我们从单体架构迁移到微服务模式时,其中一个比较大的变化就是模块(业务,服务等)间的调用方式.在以前,一个业务流程的执行在一个进程中就完成了,但是在微服务模式下可能会分散到2到10个,甚至更多的机器( ...
- (5)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- 熔断降级(Polly)
一. 什么是熔断降级 熔断就是“保险丝”.当出现某些状况时,切断服务,从而防止应用程序不断地尝试执行可能会失败的操作给系统造成“雪崩”,或者大量的超时等待导致系统卡死. 降级的目的是当某个服务提供者发 ...
- (5).NET CORE微服务 Micro-Service ---- 熔断降级(Polly)
一. 什么是熔断降级 熔断就是“保险丝”.当出现某些状况时,切断服务,从而防止应用程序不断地尝试执行可能会失败的操作给系统造成“雪崩”,或者大量的超时等待导致系统卡死. 降级的目的是当某个服务提供者发 ...
- 熔断 降级(polly)
熔断 降级(polly) https://www.cnblogs.com/szlblog/p/9300845.html1.熔断降级的概念: 熔断:我这里有一根长度一米的钢铁,钢铁的熔点1000度(假设 ...
- 熔断降级(Polly)
熔断降级(Polly) https://www.cnblogs.com/qhbm/p/9224307.html 一. 什么是熔断降级 熔断就是"保险丝".当出现某些状况时,切断服务 ...
- Polly+AspectCore实现熔断与降级机制
Polly+AspectCore实现熔断与降级机制 https://www.cnblogs.com/edisonchou/p/9159644.html 一.熔断.降级与AOP 1.1 啥是熔断? 在广 ...
随机推荐
- oracle 建立表空间和用户
.建立表空间, create tablespace "NETHRA" DATAFILE 'D:\DataBase\Oracle\iClass\iclass\iclass.DBF' ...
- dns记录类型(转)
NS:(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串.通过主机名,最终 ...
- Linux 基础教程 30-tcpdump命令-2
在上一节讲了一些tcpdump常用功能,本期我们继续学习tcpdump后续功能. 流量过滤 tcpdump不仅支持单个过滤表达式过滤,也还支持多个过滤表达式.但需要注意的是传入的过滤表 ...
- android事件分发
1). android对事件分发的顺序为:Activity--->PhoneWindow--->DecorView--->yourView; 2). android控件对事件处理的优 ...
- 类数组对象 实参对象arguments
先看实参对象arguments 之前对argument有点印象,知道它不是真正的数组,但也可以arguments[0]和arguments.length.今天详细的记录一下. js的默认行为:省略的实 ...
- ZOJ3714:Java Beans
There are N little kids sitting in a circle, each of them are carrying some java beans in their hand ...
- Atom打造优雅的MarkDown 编辑器
1.下载Atom https://atom.io/ 2.安装Atom 双击自动安装,会默认安装到C盘,无法修改. 3.安装simplified-chinese-menu 插件 这是一个可以将软件汉化的 ...
- JS DOM对象控制HTML元素详解
JS DOM对象控制HTML元素详解 方法: getElementsByName() 获取name getElementsByTagName() 获取元素 getAttribute() 获取元素 ...
- linux中使用unzip命令中文乱码解决办法
今天在使用unzip进行解压缩文件时,发现解压出的文件中文乱码,最后使用如下命令解决: unzip -O CP936 xxx.zip 特此记录一下.
- 初学python之路-day15
一.生成器send方法 # send的工作原理 # 1.send发送信息给当前停止的yield # 2.再去调用__next__()方法,生成器接着往下指向,返回下一个yield值并停止 # 案例: ...