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的更多相关文章

  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. Mysql快速重置root密码

    以Mac版本为例 首先关闭mysql服务 然后新建一个Terminal 1.输入 sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables 2 ...

  2. 一起学Angular

    最近想做一款跨平台(pc\app\pad)的东西玩玩,研究了许多技术: android.ios.H5.Bootrap.angular.angular2.ApiCloud.微信小程序 除android. ...

  3. 安装Oracle数据库时出现网络配置需求检查失败

    提示方法:将 Microsoft LoopBack Adapter 配置为系统的主网络适配器.  解决方法:  控制面板->添加硬件->是,(win7及之后没有添加硬件这个选项了,可以在c ...

  4. [转]解决Mysql InnoDB: Failing assertion: ret || !assert_on_error问题

    国庆回来后,发现mysql停止服务了,没办法继续启动了.查看日志,看到: 131008 09:56:03 mysqld_safe Starting mysqld daemon with databas ...

  5. TSQL--NULL值和三值逻辑

    在SQL SERVER 中逻辑表达式存在三种值:TRUE+FALSE+UNKNOWN.UNKNOW可以理解为不确定,既不是TRUE又不是FALSE的表达式,主要由与NULL相关的逻辑判断引起,值为NU ...

  6. Solr相似度算法二:Okapi BM25

    地址:https://en.wikipedia.org/wiki/Okapi_BM25   In information retrieval, Okapi BM25 (BM stands for Be ...

  7. mysqldump的简单使用

    背景 需要搞mysql数据同步,从一台服务器把数据库同步到另外一台服务器上,如果折腾过的话,就知道有个这玩意--mysqldump,其实就是mysql自带的一个命令而已 操作步骤 1. 认识mysql ...

  8. ADO.NET批量添加数据到SQL Server—BulkCopy使用指南

    BulkCopy位于System.Data.SqlClient命名空间,允许你使用其他源的数据有效地批量加载 SQL Server 表. 属性: BatchSize :每个批处理中的行数. 在每个批处 ...

  9. cesium随笔 — 获取当前鼠标的经度、纬度、高度

    代码: function getPosition() { //得到当前三维场景 var scene = viewer.scene; //得到当前三维场景的椭球体 var ellipsoid = sce ...

  10. linux学习之用户的切换

    普通用户: 输入su 用户名,点击Enter Root用户: 输入su root,点击Enter 输入登录密码,点击Enter