.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 啥是熔断? 在广 ...
随机推荐
- 如何规范移动应用交互设计?UI/UX设计师须知的11个小技巧
以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 十年前,手机的使用只是为了沟通. 而近几年,情况发生了很大变化,我们很难找到不使用手机的人.手机在极 ...
- HDU 5117 Fluorescent (数学+状压DP)
题意:有 n 个灯,初始状态都是关闭,有m个开关,每个开关都控制若干个.问在m个开关按下与否的2^m的情况中,求每种情况下亮灯数量的立方和. 析:首先,如果直接做的话,时间复杂度无法接受,所以要对其进 ...
- Understanding String Table Size in HotSpot
In JDK-6962930[2], it requested that string table size be configurable. The resolved date of that b ...
- oracle内部结构
数据库管理系统将数据存储在磁盘.磁带以及其他的裸设备上,虽然这些设备的访问速度相比内存慢很多,但其非易失性和大容量的特点使他们成为数据存储的不二之选. 本文主要讨论大型数据库产品的磁盘存储内部结构,这 ...
- task3:词频统计
相关的类: java.util.regex.Pattern static Pattern compile(String regex) //编译模式 static Pattern compile(Str ...
- centos mysql忘记密码找回(仅限mysql5.7)
1.停掉mysql 2.执行#mysqld_safe --user=mysql --skip-grant-tables --skip-networking & 3.#mysql 4.updat ...
- Math类的三个方法比较: floor() ceil() round()
public class Test { public static void main(String[] args) { double d1 = 3.4, d2 = 3.6; //正数 double ...
- 目前主流的四大浏览器内核Trident、Gecko、WebKit以及Presto
“浏览器内核”主要指渲染引擎(Rendering Engine),负责解析网页语法(如HTML.JavaScript)并渲染.展示网页.因此,所谓的浏览器内核通常也就是指浏览器所采用的渲染引擎,渲染引 ...
- shell相关文件
站在用户登录的角度来说,SHELL的类型: 登录式shell: 正常通常某终端登录 su - USERNAME su -l USERNAME 非登录式shell: su USERNAME 图形终端下 ...
- js判断是移动端还是PC端访问网站
window.location.href = /Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent) ? "htt ...