首页 > 其他分享 >Polly服务熔断

Polly服务熔断

时间:2024-07-31 10:39:56浏览次数:9  
标签:Polly Task 服务 熔断 断路器 WriteLine Console

 //自定义异常
 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,Task,服务,熔断,断路器,WriteLine,Console
From: https://www.cnblogs.com/daiwk/p/18334116

相关文章

  • 从服务器获取数据后更新 DataTable 的列
    我需要一个解决方案来解决我的问题。我有一个Django应用程序,我在服务器端处理中使用DataTables,表模板对于我拥有的所有模型都是动态的,我只需传递列(带有data,||的字典列表|和name)在模板的上下文中,非常简单...title之后,我需要对列进行一些......
  • docker换国内镜像源-Docker安装 Nginx测试-Docker部署Gitblit服务器
    docker换国内镜像源,docker换源echo>/etc/docker/daemon.jsoncat>/etc/docker/daemon.json<<END{  "registry-mirrors":[    "https://hub-mirror.c.163.com",    "https://ustc-edu-cn.mirror.aliyuncs.com",    "https:/......
  • netty核心流程(一):服务端如何建立连接
    为了接收连接请求,Netty服务端应该做些什么事情?根据JavaNIO的知识,服务端在准备接收客户端连接之前做了下面几个工作,我们可以带着问题往下看。服务端对连接请求是如何初始化的?如何把用户定义的处理逻辑childHandler加入到Netty的处理流程里?如何在Socket上绑定一个端......
  • (超详细)备赛笔记 2024年全国职业院校(中职组)技能大赛(ZZ052大数据应用与服务)第一套试题
    2024年职业院校中职组ZZ052大数据应用与服务赛项赛题第01套【子任务三和四】(一)任务一:数据获取与清洗1.子任务一:数据获取(1)启动Hadoop集群,使用HDFSShell指令,在HDFS根目录下级联创建一个名为/behavior/origin_log的目录,用于存储采集到的用户行为日志;--如果......
  • 不写代码,不用服务器 ,让自己的公众号拥有一个智能客服
    想象一下,你的公众号粉丝正在浏览你的内容,突然她遇到一个问题,不知道该如何操作。就在她有些困惑时,一个友善的智能客服出现了,瞬间解答了她的疑惑。这一切竟然都没有你写一行代码。我们常常认为,技术的应用需要专业的编程技能和复杂的开发过程。然而,事实上,通过一些简单易用的工......
  • 网络安全靶场系列(臃肿版):PbootCMS(V3.2.5)遇到的坑(您的服务器环境不支持gd扩展,将无法使
    PbootCMS(V3.2.5)遇到的坑(您的服务器环境不支持gd扩展,将无法使用验证码!)前言dockerphpgd扩展,docker安装php扩展gd库一、安装nginx、php、mysql镜像二、运行、停止、删除容器三、安装php扩展gd库四、扩展知识1、docker-php-source2、docker-php-ext-enable......
  • springboot+vue基于微服务架构的设备管理系统【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着企业规模的不断扩大与信息化程度的日益加深,设备管理成为企业运营中不可或缺的一环。传统集中式架构的设备管理系统在面对大规模数据处理、高并发访问及系统扩展性等方面显得力不从心。微服务架构以其高度的模块化、灵活的服务部署......
  • [附开题]flask框架的社区服务管理系统0f6i9(python+源码)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着城市化进程的深入和居民生活水平的提高,社区服务需求日益多样化与复杂化。传统的社区服务模式已难以满足居民对于高效、便捷、个性化服......
  • [附开题]flask框架的社区服务系统ff00q(python+源码)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着社会的快速发展和居民生活水平的提高,社区作为城市的基本单元,其服务功能日益丰富和多样化。然而,传统社区服务方式在应对日益增长的居民......
  • Nginx搭建文件服务器
    下载Nginx,我这里下载1.26版本 http://nginx.org/download/nginx-1.26.1.zip下载完成后解压出来,进入conf文件夹,找到nginx.conf配置文件,定位到server栏修改如下后保存server{charsetutf-8;#设置支持中文listen80;#监听端口......