Polly服务熔断
//自定义异常
public class MyException : Exception
{
public MyException(string? message) : base(message)
{
}
} public class CircuitBreakerExample
{
//熔断规则
private static readonly IAsyncPolicy<HttpResponseMessage> _circuitBreakerPolicy = Policy<HttpResponseMessage>
.Handle<MyException>() // 可以指定更具体>的异常类型
.OrResult(resopnse=>resopnse.StatusCode==HttpStatusCode.InternalServerError)
.CircuitBreakerAsync(
handledEventsAllowedBeforeBreaking: 5, // 在断路器跳闸前允许通过的失败事件数(连续失败的次数)
durationOfBreak: TimeSpan.FromSeconds(3), // 断路器跳闸后保持打开的时间
onBreak: (ex, breakTimeout) => // 当断路器跳闸时执行的回调
{
Console.WriteLine("熔断开关状态为open, 服务" +
breakTimeout.TotalSeconds + " 秒后才能再次访问");
},
onReset: () => // 当断路器从跳闸状态恢复时执行的回调
{
Console.WriteLine("熔断开关状态为closed,现在能再次访问服务");
},
onHalfOpen: () => // 当断路器从关闭状态变为半开状态时执行的回调
{
Console.WriteLine("熔断开关现在状态为 half-open。允许单次呼叫查看服务是否可用.");
}
); //通过熔断规则调用服务
public static async Task CallServiceWithCircuitBreakerAsync()
{
try
{
// 使用断路器策略来调用服务
await _circuitBreakerPolicy.ExecuteAsync(RemoteService);
}
//捕获断路异常
catch (BrokenCircuitException ex)
{
Console.WriteLine("熔断开关状态为open");
}
} //模拟远程服务
private static int FailCount = 6;
public static async Task<HttpResponseMessage> RemoteService()
{
try
{
await Task.Delay(100);
if (FailCount == 0)
{
Console.WriteLine("请求服务成功!");
return new HttpResponseMessage(System.Net.HttpStatusCode.OK);
}
// 模拟成功的服务响应
FailCount = FailCount - 1;
throw new MyException("请求服务失败!");
}
catch
{
Console.WriteLine("请求服务失败!");
return new HttpResponseMessage(System.Net.HttpStatusCode.InternalServerError);
}
}
}
#region Polly熔断服务
#if true
await Task.Run(async () =>
{
while (true)
{
await Task.Delay(1000);
CircuitBreakerExample.CallServiceWithCircuitBreakerAsync().Wait();
}
});
#endif
#endregion

Polly服务熔断的更多相关文章
- spring-cloud-hystrix服务熔断与降级
Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时,异常等,Hystrix能保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联 ...
- 【五】服务熔断、降级 —— Hystrix(豪猪)
分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖,每个依赖关系将在某些时候将不可避免地失败. 服务雪崩 多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务 B和微服务 ...
- java框架之SpringCloud(5)-Hystrix服务熔断、降级与监控
前言 分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败.不做任何处理的情况下,很容易导致服务雪崩. 服务雪崩:多个微服务之间调用的时候,假设 ...
- 服务容错保护断路器Hystrix之六:服务熔断和服务降级
伴随着微服务架构被宣传得如火如荼,一些概念也被推到了我们面前(管你接受不接受),其实大多数概念以前就有,但很少被提的这么频繁(现在好像不提及都不好意思交流了).想起有人总结的一句话,微服务架构的特点就 ...
- 【5】JMicro微服务-熔断降级
如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 1. 使用服务熔断降级特性,必须先启动Pubsub服务,服务监听服务,熔断器服务3个服务 先启动Pubsub及服务监听两 ...
- spring cloud 学习(4) - hystrix 服务熔断处理
hystrix 是一个专用于服务熔断处理的开源项目,当依赖的服务方出现故障不可用时,hystrix有一个所谓的断路器,一但打开,就会直接拦截掉对故障服务的调用,从而防止故障进一步扩大(类似中电路中的跳 ...
- Spring Cloud实战之初级入门(四)— 利用Hystrix实现服务熔断与服务监控
目录 1.环境介绍 2.服务监控 2.1 加入依赖 2.2 修改配置文件 2.3 修改启动文件 2.4 监控服务 2.5 小结 3. 利用hystrix实现消费服务熔断 3.1 加入服务熔断 3.2 ...
- springcloud微服务总结五 服务熔断
一:雪崩效应 如下图所示:A作为服务提供者,B为A的服务消费者,C和D是B的服务消费者.A不可用引起了B的不可用,并将不可用像滚雪球一样放大到C和D时,导致整个系统瘫痪,雪崩效应就形成了. 雪崩过程: ...
- 服务熔断、降级、限流、异步RPC -- HyStrix
背景 伴随着业务复杂性的提高,系统的不断拆分,一个面向用户端的API,其内部的RPC调用层层嵌套,调用链条可能会非常长.这会造成以下几个问题: API接口可用性降低 引用Hystrix官方的一个例子, ...
- 微服务熔断限流Hystrix之流聚合
简介 上一篇介绍了 Hystrix Dashboard 监控单体应用的例子,在生产环境中,监控的应用往往是一个集群,我们需要将每个实例的监控信息聚合起来分析,这就用到了 Turbine 工具.Turb ...
随机推荐
- invalid comparison: java.util.Date and java.lang.String异常的原因
mybatis查询时使用date类型与""比较导致的 例 <if test="params.applicationEndTime != null and param ...
- 基恩士PLC数据 转 Modbus RTU TCP项目案例
1 案例说明 1. 设置网关采集基恩士PLC数据 2. 把采集的数据转成Modbus协议转发给其他系统. var code = "244226f8-1eed-48e4 ...
- SERSYNC服务
inotiry图片参考 sersync图片参考 inotify文字教程 该软件对系统有要求,内核2.6以上,并且有如下目录,后面会讲解三个文件用途 [root@jokerpro ~]# uname - ...
- hive第二课:Hive3.1.2分区与排序以及分桶(内置函数)
Hive3.1.2分区与排序(内置函数) 1.Hive分区(十分重要!!) 分区的目的:避免全表扫描,加快查询速度! 在大数据中,最常见的一种思想就是分治,我们可以把大的文件切割划分成一个个的小的文件 ...
- 韦东山freeRTOS系列教程之【第三章】任务管理
目录 系列教程总目录 概述 3.1 基本概念 3.2 任务创建与删除 3.2.1 什么是任务 3.2.2 创建任务 3.2.3 示例1: 创建任务 3.2.4 示例2: 使用任务参数 3.2.5 任务 ...
- Java中字符串去除空格
1. str.trim(); 去掉首尾空格 2. str.replace(" ", ""); 去掉所有空格,包括首尾.中间 String str = " ...
- Nginx常用操作
Nginx Nginx的最重要的几个使用场景 静态资源服务,通过本地文件提供服务 反向代理服务,延伸出包括缓存,负载均衡等 API服务,OpenResty 相关概念 简单请求和非简单请求 请求方法是H ...
- C# 轻量级 ORM 框架 NPoco 的简单应用
目录 简介 快速入门 安装 NuGet 包 实体类User 数据库类DbFactory 增删改查 Insert Select Update Delete 总结 简介 NPoco 是 PetaPoco ...
- 「悬浮捷径SoftCircle」安卓平台的hao123,一键打开万物
罗老师的onestep一步发布之前, 终端的打开形式还拘泥于桌面和负一屏 这种方式够简洁,但缺点明显: 1.入口单一性:只能在app首页和各种扫一扫之间选择和切换 2.操作复杂:入口切换需要频繁的进入 ...
- 共享库soname机制
目录 前言 共享库版本号 共享库命名机制 realname soname linkname 总结 参考文章 前言 在使用第三方库时,我们会发现第三方库会提供一组文件,他们的后缀一般是.so(如libn ...