//自定义异常
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服务熔断的更多相关文章

  1. spring-cloud-hystrix服务熔断与降级

    Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时,异常等,Hystrix能保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联 ...

  2. 【五】服务熔断、降级 —— Hystrix(豪猪)

    分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖,每个依赖关系将在某些时候将不可避免地失败. 服务雪崩 多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务 B和微服务 ...

  3. java框架之SpringCloud(5)-Hystrix服务熔断、降级与监控

    前言 分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败.不做任何处理的情况下,很容易导致服务雪崩. 服务雪崩:多个微服务之间调用的时候,假设 ...

  4. 服务容错保护断路器Hystrix之六:服务熔断和服务降级

    伴随着微服务架构被宣传得如火如荼,一些概念也被推到了我们面前(管你接受不接受),其实大多数概念以前就有,但很少被提的这么频繁(现在好像不提及都不好意思交流了).想起有人总结的一句话,微服务架构的特点就 ...

  5. 【5】JMicro微服务-熔断降级

    如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl   1. 使用服务熔断降级特性,必须先启动Pubsub服务,服务监听服务,熔断器服务3个服务 先启动Pubsub及服务监听两 ...

  6. spring cloud 学习(4) - hystrix 服务熔断处理

    hystrix 是一个专用于服务熔断处理的开源项目,当依赖的服务方出现故障不可用时,hystrix有一个所谓的断路器,一但打开,就会直接拦截掉对故障服务的调用,从而防止故障进一步扩大(类似中电路中的跳 ...

  7. Spring Cloud实战之初级入门(四)— 利用Hystrix实现服务熔断与服务监控

    目录 1.环境介绍 2.服务监控 2.1 加入依赖 2.2 修改配置文件 2.3 修改启动文件 2.4 监控服务 2.5 小结 3. 利用hystrix实现消费服务熔断 3.1 加入服务熔断 3.2 ...

  8. springcloud微服务总结五 服务熔断

    一:雪崩效应 如下图所示:A作为服务提供者,B为A的服务消费者,C和D是B的服务消费者.A不可用引起了B的不可用,并将不可用像滚雪球一样放大到C和D时,导致整个系统瘫痪,雪崩效应就形成了. 雪崩过程: ...

  9. 服务熔断、降级、限流、异步RPC -- HyStrix

    背景 伴随着业务复杂性的提高,系统的不断拆分,一个面向用户端的API,其内部的RPC调用层层嵌套,调用链条可能会非常长.这会造成以下几个问题: API接口可用性降低 引用Hystrix官方的一个例子, ...

  10. 微服务熔断限流Hystrix之流聚合

    简介 上一篇介绍了 Hystrix Dashboard 监控单体应用的例子,在生产环境中,监控的应用往往是一个集群,我们需要将每个实例的监控信息聚合起来分析,这就用到了 Turbine 工具.Turb ...

随机推荐

  1. .NET 个人博客-首页排版优化-2

    个人博客-首页排版优化-2 原本这篇文章早就要出了的,结果之前买的服务器服务商跑路了,导致博客的数据缺失了部分.我是买了一年的服务器,然后用了3个月,国内跑路云太多了,然后也是花钱重新去别的服务商买了 ...

  2. adb连接安卓设备失败failed to start daemon

    adb连接安卓设备失败failed to start daemon Reference:https://blog.csdn.net/whshuo2010/article/details/5109449 ...

  3. 设备树DTS 学习:学习总结(应用篇)

    设备树DTS 学习:学习总结(应用篇) 背景 经过前几章的学习,我们可以说是掌握了设备树的基础用法,现在作为总结回顾. 1.设备树DTS 学习:有关概念 介绍了什么是设备树,设备树的作用,如何编译设备 ...

  4. NXP i.MX 8M Mini的视频开发案例分享 (下)

    本文主要介绍i.MX 8M Mini的视频开发案例,包含基于GStreamer的视频采集.编解码.算法处理.显示以及存储案例,GigE工业相机测试说明,H.265视频硬件解码功能演示说明等. 注:本案 ...

  5. 使用定时器:在logs目录,每两分钟产生一个文件

    1.使用定时器:在logs目录,每两分钟产生一个文件(文件格式为:201711151323.log.201711151323.log.2017111513xx.log ...思路:定时器定时调用she ...

  6. Docker运维之容器的日志清理

    在容器运行的过程中,通常会产生大量的日志,尤其是应用程序本身记录了info级别的日志时候,程序的标准输出记录到容器的日志.这样会占用大量的磁盘空间,严重者导致IO异常,最终服务会宕机. 方案一:定期手 ...

  7. Three光源Target位置改变光照方向不变的问题及解决方法

    0x00 楔子 在 Three.js 中,光源的目标(target)是一种用于指定光源方向的重要元素.在聚光灯中和定向光(DirectionalLight)中都有用到. 有时我们可能会遇到光源目标位置 ...

  8. [oeasy]python0145_版本控制_git_备份还原

    git版本控制 回忆上次内容 上次我们了解了 try 的完全体 try 尝试运行   except 发现异常时运行的代码块   else 没有发现异常时运行的代码块   finally 无论是否发现异 ...

  9. [oeasy]python0093_电子游戏起源_视频游戏_达特茅斯_Basic_家酿俱乐部

    编码进化 回忆上次内容 Ed Robert 的 创业之路 从 售卖 diy 组装配件 到进军 计算器市场 最后 发布 牛郎星8800 intel 8080 的出现 让 人人都有 自己的 个人电脑 Bi ...

  10. 学习笔记--Java 运算符

    Java 运算符 算术运算符 关系运算符 逻辑运算符 位运算[略] 赋值运算符 字符串连接符 三元运算符 Java 运算符 按照功能划分: 功能 运算符 算术运算符 +.-.*./.++.--.% 关 ...