降级规则与自定义降级处理

引言:降级不等于"失败" 在前面两篇文章中,我们学习了熔断的原理和三种熔断策略。我们知道,当熔断器开启时,Sentinel会停止调用依赖服务,快速返回。 但问题来了:快速返回什么呢? 很多初学者会认为:熔断就是"快速失败",返回一个错误。 这种理解是片面的! 想象这样一个场景: 你在电商平台上浏览商品详情页。此时商品服务的推荐模块因为故障被熔断了。 糟糕的降级:页面直接显示"服务异常,请稍后重试" 用户体验差 用户可能直接离开 业务受损 优雅的降级:推荐模块不显示,但商品详情、库存、价格等核心信息正常展示 用户看不出异常 核心功能不受影响 业务损失最小 这就是优雅降级的艺术:让系统在故障时仍然能提供有限但可用的服务。 本文将深入讲解如何实现优雅的降级处理。 默认降级处理:快速失败 Sentinel的默认行为 当熔断器开启时,Sentinel的默认行为是: 拦截对资源的访问 抛出DegradeException(继承自BlockException) 业务代码需要捕获这个异常并处理 代码示例 import com.alibaba.csp.sentinel.Entry; import com.alibaba.csp.sentinel.SphU; import com.alibaba.csp.sentinel.slots.block.BlockException; import com.alibaba.csp.sentinel.slots.block.degrade.DegradeException; public class DefaultFallbackDemo { public static void main(String[] args) { // 假设已经配置了熔断规则,并且熔断器已开启 try (Entry entry = SphU.entry("queryProductDetail")) { // 业务逻辑:查询商品详情 System.out.println("查询商品详情成功"); } catch (DegradeException e) { // 熔断降级 System.out.println("服务降级:" + e.getClass().getSimpleName()); } catch (BlockException e) { // 其他限流、系统保护等 System.out.println("被限流或保护:" + e.getClass().getSimpleName()); } } } 输出: ...

2025-11-20 · maneng

如约数科科技工作室

浙ICP备2025203501号

👀 本站总访问量 ...| 👤 访客数 ...| 📅 今日访问 ...