60、Polly瞬态故障处理

article/2025/6/25 23:22:28

Polly 是一个.NET 弹性和瞬态故障处理库,在分布式系统和微服务架构中,可有效处理网络不稳定、服务依赖故障或资源限制等引发的瞬态故障,保障系统的稳定性和可靠性,以下是其常见策略及应用说明:

核心策略

1.重试策略

在遇到瞬态故障时自动重试操作。当执行的方法发生异常时,可按照指定次数进行重试,开发者能指定需处理的异常类型、重试次数及每次重试的回调函数。例如在网络请求或数据库调用中,若出现瞬态故障,使用重试策略可提高操作成功的概率。

2.熔断器策略

在连续失败达到一定次数后,暂时停止进一步的尝试,以防止系统过载。当调用接口发生异常,且多次都返回异常时,可先熔断一段时间,不再处理业务接口,直接报错;待熔断时间过了之后重新处理请求。

3.超时策略

为操作设置一个超时时间,超时后操作将被中断。可确保调用者永远不需要等待超过配置的超时时间,避免因长时间等待而影响用户体验。

4.故障恢复策略

在发生故障时执行特定的恢复操作,如记录日志、通知管理员等,方便开发者及时了解系统故障情况并进行处理。

5.回退策略

在请求失败时,定义替代值或操作,确保系统能够优雅降级。当调用外部 API 失败时,可返回一个默认值或从缓存中读取数据,避免服务中断。

6.舱壁隔离策略

限制并发请求的数量,防止系统资源被耗尽。将系统资源分隔成多个独立的部分(隔板),每个部分可独立地处理请求,从而限制单个部分的资源消耗,保护整体系统的稳定性。

7.Hedging 策略

在请求缓慢时,执行并行操作并等待最快的响应,提高系统的响应速度。

8.Rate Limiter 策略

限制系统处理请求的速率,适用于控制负载,防止系统过载。

使用场景

  • 网络请求重试:如HTTP请求、数据库调用等瞬态故障场景。
  • 第三方服务调用超时处理:避免因第三方服务故障导致系统崩溃。
  • 服务降级:主服务不可用时,提供备用方案保障基本功能。
  • 并发控制:防止高并发导致系统过载。

代码示例(重试策略)

using Polly;
using System;
using System.Threading.Tasks;class Program
{static async Task Main(string[] args){var retryPolicy = Policy.Handle<Exception>() // 指定要处理的异常类型.WaitAndRetryAsync(3, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt))); // 定义重试策略和等待时间await retryPolicy.ExecuteAsync(async () =>{Console.WriteLine("开始执行操作...");// 模拟一个可能会失败的操作,例如网络请求或数据库调用await SimulateUnstableOperationAsync();Console.WriteLine("操作成功!");});}static async Task SimulateUnstableOperationAsync(){// 模拟一个50%几率抛出异常的操作Random random = new Random();if (random.Next(2) == 0){throw new Exception("模拟的瞬态故障!");}else{Console.WriteLine("模拟操作成功执行!");await Task.CompletedTask; // 模拟异步操作成功完成}}
}

优势

  • 声明式定义:通过流畅API简化策略配置。
  • 线程安全:支持多线程环境下的策略执行。
  • 灵活性:支持策略组合,适应复杂场景。
  • 开源生态:社区活跃,文档完善,支持.NET Standard 1.1+。

总结

Polly通过重试、熔断、超时、回退等策略,为.NET开发者提供了处理瞬态故障的完整解决方案,尤其适用于分布式系统和微服务架构。其声明式API和线程安全特性,使开发者能够轻松构建健壮且可靠的应用程序。

在这里插入图片描述


http://www.hkcw.cn/article/QMjpZlwtcN.shtml

相关文章

vulnyx loweb writeup

信息收集 arp-scan nmap 这里也可以接其它选项进行深入的扫描&#xff0c;因为我是打完后再写的wp&#xff0c;第一次做的时候我是扫了的&#xff0c;但是我没有得到什么有用的信息&#xff0c;所以写wp的时候我就没放出来了。这里直接去web 获取userFlag 一个默认的apache2 …

学员匿名举报教练骚扰后怀疑店长泄密:这两个教练在找她!

学员匿名举报教练骚扰后怀疑店长泄密。小孙反映,她感觉被健身房的两位教练骚扰了,她给记者看了聊天记录,对方曾说“从你身上让我能感受到你无比强大的力量”,“果然是顶级白月光”。最近让她倍感困扰的是,店长把她匿名举报的事告诉了涉事教练,导致这两个教练在找她,她要…

距2025高考还有4天 家长准备了什么礼物?

距2025高考还有4天 家长准备了什么礼物?!今天已经是6月2号,距离高考只剩下4天。每年高考结束后,许多高三学生都迫不及待地想要收到家长为他们准备的礼物,比如手机或电脑。高中三年对学生来说确实很辛苦,无论是在身体上还是精神上都付出了很多。高考结束后,学生们确实需要…

深圳天气 六一“不下雨通知”逗乐众人

深圳天气 六一“不下雨通知”逗乐众人!上海入汛首日遭遇了持续整天的大雨。截至18时,累计降水量显示普降大雨,市区徐家汇站在下午三点前几乎未曾停歇。雨雾和低云导致垂直能见度极低,全市最高气温仅在18-20℃之间,许多市民穿起了长袖甚至羊毛衫,这种天气让全国网友感到惊…

男子迷路拒绝救援后又求助 自信误判险酿祸

5月31日端午节,在北京房山一处野山中,一名男子登山迷路。他给警方打电话询问下山道路,警方随后联系了房山蓝天救援队。晚上8点多,当救援队员询问男子详细信息时,男子表示不想麻烦救援队,称自己能找到路下山。尽管如此,为了安全起见,房山蓝天救援队还是启动了救援程序。…

印度一游客摸老虎自拍遭袭击 触摸禁忌区引攻击

泰国普吉岛知名观光景点“老虎王国”近日发生了一起惊险事件。一名印度游客在与老虎合影时,因触摸老虎遭到攻击,现场画面在社交媒体上引发了广泛关注。该景点以“一生仅有一次的与虎互动体验”为卖点,吸引了众多游客。事发时,这名游客手持链条与老虎并排站立,驯兽师正用棍…

李亚鹏宣布将幼儿园无偿移交 为社会做贡献

6月1日,知名演员李亚鹏现身北京培德书院幼儿园六一活动。在活动现场,他宣布将把培德书院幼儿园无偿移交给一位资深教育家管理。他表示,人来到这个世界上总要为社会做点什么,这与个人财富无关,而是个人的价值观。培德书院幼儿园由李亚鹏于2011年前后创办,定位高端民办教育…

男子为省30元钱不幸离世 高原缺氧悲剧引发关注

46岁的河南卡车司机常志荣近日在青藏线因高原缺氧离世。他的骨灰及车辆由多名爱心司机跨越2400多公里,从五道梁地区送回老家安阳林州。其中一位司机表示:“不让家属承担一切费用,中国人就该互相帮助”。青海五道梁地区海拔4665米,含氧量不足海平面50%。5月27日,常志荣在此…

Spring框架学习day6--事务管理

Spring事务管理 Spring事务管理是在AOP的基础上&#xff0c;当我们的方法完全执行成功后&#xff0c;再提交事务&#xff0c;如果方法中有异常&#xff0c;就不提交事务 Spring中的事务管理有两种方式&#xff1a; ​ 1.编程式事务 ​ 需要我们在业务代码中手动提交 ​ 2.声明式…

【C盘瘦身】Docker安装目录占用C盘过大,一键移动给C盘瘦身

文章目录 前言一、Docker移动3步骤1. 进入docker的设置页面2. 点击“Browse”&#xff0c;选择D盘新建的目标目录3. 点击“Apply & restart”&#xff0c;选择Yes4. 移动完毕 二、结果检查 前言 最近安装了Dify&#xff0c;由于是Docker安装&#xff0c;不想安装完后&…

百度golang研发一面面经

输入一个网址&#xff0c;到显示界面&#xff0c;中间的过程是怎样的 IP 报文段的结构是什么 Innodb 的底层结构 知道几种设计模式 工厂模式 简单工厂模式&#xff1a;根据传入类型参数判断创建哪种类型对象工厂方法模式&#xff1a;由子类决定实例化哪个类抽象工厂模式&#…

CTF:网络安全的实战演练场

文章目录 每日一句正能量前言一、CTF简介&#xff08;一&#xff09;什么是CTF&#xff1f;&#xff08;二&#xff09;CTF的历史 二、CTF比赛形式&#xff08;一&#xff09;线上赛&#xff08;Online CTF&#xff09;&#xff08;二&#xff09;线下赛&#xff08;Offline CT…

Javaweb学习——day1(JavaWeb 介绍与开发环境搭建)

文章目录 1. 什么是 JavaWeb&#xff1f;2. HTTP 协议与请求响应流程2.1 HTTP 概述&#xff1a;2.2 请求响应流程&#xff1a;2.3 常见 HTTP 方法&#xff1a; 3. 开发环境搭建3.1 安装 Tomcat3.1.1 我的是win11 64位版&#xff0c;选择下载如图&#xff1a;3.1.2 解压 Tomcat3…

【沉浸式求职学习day52】【初识Mybaits】

沉浸式求职学习 什么是Mybatis1.持久化2.持久层3.为什么需要Mybatis&#xff1f;4.第一个Mybatis程序 CRUD1、namespace2、select3、Insert4、update5、Delete6、万能Map7、模糊查询 配置解析1、核心配置文件2、环境配置&#xff08;environments&#xff09;3、属性&#xff0…

mapStruct实体类属性映射工具实现

mapStruct实体类属性映射实现 1. 概述对比 BeanUtils.copyProperties场景对比 快速入门lombok mapStructmaven 依赖代码实现1. 定义两个要转换的实体类2. 定义转化接口测试 mapStruct Spring1. 注册成bean需要使用bean 转化规则1. 成员变量名不同时2. 子对象映射3. 数据类型映…

PostgreSQL 安全纵深防御:从权限到加密

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

马斯克说不想为美政府所作一起担责 拒绝成为替罪羊

美国企业家马斯克在接受采访时表达了他对美国政府的一些看法。他表示不愿为政府所做的一切承担责任,并提到他之前领导的“政府效率部”成为了各种问题的替罪羊,这让他感到不公平。马斯克还谈及了与美国总统特朗普的关系,承认两人在一些问题上存在分歧。他强调自己不想公开反…

花105万买基金亏30万 状告银行 二审驳回全部诉求

一位年过八旬的投资者在2021年投入105万元购买了一只公募基金产品,两年多时间亏损约30万元。该投资者将相关代销银行告上法庭,要求其承担赔偿责任。案件经过两次审理,一审法院判决银行承担70%损失赔偿责任并支付损失利息。二审法院则认为,投资者自主决定购买理财产品,且产…

龙舟征婚小伙称微信被加爆 千人响应求偶遇

5月31日,广州猎德村迎来一年一度的龙舟招景盛会,超过150条村前来猎德涌趁景。其中,一条龙舟上的“征婚启事”引发广泛关注。视频显示,一名男子脖子上挂着一张写有“两栋楼,海珠,未婚”的牌子,另一面则打印了他的微信二维码。6月1日,尝试通过该微信二维码添加该男子好友…

台风失踪情况确定改变 1号台风蝴蝶六月来 生成条件逐步成熟

台风失踪情况确定改变 1号台风蝴蝶六月来 生成条件逐步成熟!2025年前五个月,西北太平洋及南海海域没有生成任何一个编号台风。从1月到5月,通常会有一到两个台风生成,有时甚至在1月或2月就会出现第一个台风。然而这一年直到6月初,海面仍然平静,这种现象让很多人感到反常。…