.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 啥是熔断? 在广 ...
随机推荐
- http://angular.github.io/router/
Angular New Router Guide Configuring the Router- This guide shows the many ways to map URLs to compo ...
- java可视化
1.java关闭窗口代码. ft.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); IE打开 Weiler-Atherton任意多边形裁剪 http:/ ...
- 看图说话:关于BI那点事儿
[编者按]BI=DW+数据挖掘+业务分析+社会学?BI三部曲:管数据.看数据.源数据.BI有三种放法:技术部.业务部和独立部门.BI的工作=20%数据平台+30%数据支持+50%数据应用.
- Zookeeper基本使用(转)
一.Zookeeper架构 云计算越来越流行的今天,单一机器处理能力已经不能满足我们的需求,不得不采用大量的服务集群.服务集群对外提供服务的过程中,有很多的配置需要随时更新,服务间需要协调工作,这些信 ...
- windows平台使用spark-submit以client方式提交spark应用到standalone集群
1.spark应用打包,我喜欢打带依赖的,这样省事. 2.使用spark-submit.bat 提交应用,代码如下: for /f "tokens=1,2 delims==" %% ...
- (广搜) Find a way -- hdu -- 2612
链接: http://acm.hdu.edu.cn/showproblem.php?pid=2612 Find a way Time Limit: 3000/1000 MS (Java/Others) ...
- NLog日志框架简写用法
本文转载:http://www.blogjava.net/qiyadeng/archive/2013/02/27/395799.html 在.net中也有非常多的日志工具,今天介绍下NLog.NLog ...
- 别做HR最讨厌的求职者
有些求职者认为自己各方面都与所应聘的职位要求相匹配,因此在被淘汰之后总是特别不解,努力回忆起每个面试环节,却始终找不到原因.是的,也许你真的很优秀,但是你被淘汰了,原因也许并不大,只是你得罪了HR.其 ...
- R12.1.3 patch9239090
参考文档:Oracle E-Business Suite Release 12.1.3 Readme [ID 1080973.1]1.调整参数_disable_fast_validate=TRUEpg ...
- 2.自己的Github注册流程
一开始申请Github,说实话我真的不知道它是什么东西,而且有什么用途.然后我就用360百科搜索了一下有关它的介绍:. 而说明的是Git是一个分布式的版本控制系统.然后我进入官方网站进行账号注册,而注 ...