熔断降级机制
引用文件
本文引用的文件
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/handler/GlobalExceptionHandler.java
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/api/fallback/RuleBusinessApiFallbackFactory.java
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/api/RuleBusinessApi.java
- yudao-framework/yudao-spring-boot-starter-rpc/pom.xml
- yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/CommonResult.java
- yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/exception/enums/GlobalErrorCodeConstants.java
- yudao-gateway/src/main/resources/application.yaml
- yudao-framework/yudao-spring-boot-starter-monitor/src/main/java/cn/iocoder/yudao/framework/tracer/config/YudaoMetricsAutoConfiguration.java
目录
简介
本文件面向 yudao-cloud 的熔断降级机制,系统性阐述服务调用失败时的熔断触发条件与降级策略,全局异常处理器的实现方式(异常捕获、错误响应格式化与降级逻辑执行),以及基于 Resilience4j 的熔断器工作原理(状态转换、半开探测与恢复)。同时给出可落地的配置要点(超时、错误阈值、恢复等待时间)、具体降级实现示例与性能监控指标建议。
项目结构
围绕熔断降级的关键模块与文件如下:
- 网关层全局异常处理器:统一捕获并格式化异常,保障对外一致的错误响应。
- RPC 层 Feign + Resilience4j:通过依赖注入 Resilience4j Circuit Breaker,结合 Feign 的 fallbackFactory 实现优雅降级。
- 通用响应体与错误码:统一的 CommonResult 错误/成功封装,便于前后端一致处理。
- 监控与指标:Micrometer + Actuator 的基础指标配置,便于观测熔断状态与调用质量。
图示来源
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/handler/GlobalExceptionHandler.java
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/api/RuleBusinessApi.java
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/api/fallback/RuleBusinessApiFallbackFactory.java
- yudao-framework/yudao-spring-boot-starter-rpc/pom.xml
- yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/CommonResult.java
- yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/exception/enums/GlobalErrorCodeConstants.java
- yudao-framework/yudao-spring-boot-starter-monitor/src/main/java/cn/iocoder/yudao/framework/tracer/config/YudaoMetricsAutoConfiguration.java
章节来源
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/handler/GlobalExceptionHandler.java
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/api/RuleBusinessApi.java
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/api/fallback/RuleBusinessApiFallbackFactory.java
- yudao-framework/yudao-spring-boot-starter-rpc/pom.xml
- yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/CommonResult.java
- yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/exception/enums/GlobalErrorCodeConstants.java
- yudao-gateway/src/main/resources/application.yaml
- yudao-framework/yudao-spring-boot-starter-monitor/src/main/java/cn/iocoder/yudao/framework/tracer/config/YudaoMetricsAutoConfiguration.java
核心组件
- 网关全局异常处理器:在网关层统一捕获异常,将异常转换为 CommonResult 格式返回,避免泄露内部错误细节。
- Feign + Resilience4j:通过引入 spring-cloud-starter-circuitbreaker-resilience4j,启用熔断器;通过 @FeignClient 的 fallbackFactory 指定降级实现。
- 降级工厂(FallbackFactory):当远端服务不可用或调用异常时,返回默认值或兜底数据,确保业务可用性。
- 通用响应体与错误码:统一的 CommonResult.error()/success() 与全局错误码,保证错误语义一致。
章节来源
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/handler/GlobalExceptionHandler.java
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/api/RuleBusinessApi.java
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/api/fallback/RuleBusinessApiFallbackFactory.java
- yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/CommonResult.java
- yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/exception/enums/GlobalErrorCodeConstants.java
架构总览
下图展示从客户端到网关、再到 Feign 调用与熔断降级的整体流程:
图示来源
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/handler/GlobalExceptionHandler.java
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/api/RuleBusinessApi.java
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/api/fallback/RuleBusinessApiFallbackFactory.java
- yudao-framework/yudao-spring-boot-starter-rpc/pom.xml
- yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/CommonResult.java
组件详解
网关全局异常处理器
- 作用:在网关层统一拦截异常,避免响应泄露内部错误,将异常转换为 CommonResult 格式返回。
- 关键点:
- 优先级高于默认的 Spring Cloud Gateway 异常处理器。
- 对 ResponseStatusException 与其它异常分别处理,最终统一写回 JSON。
- 使用全局错误码常量,保证错误码一致性。
图示来源
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/handler/GlobalExceptionHandler.java
- yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/exception/enums/GlobalErrorCodeConstants.java
- yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/CommonResult.java
章节来源
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/handler/GlobalExceptionHandler.java
- yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/exception/enums/GlobalErrorCodeConstants.java
- yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/CommonResult.java
Feign + Resilience4j 熔断器
- 依赖引入:通过 spring-cloud-starter-circuitbreaker-resilience4j 启用熔断能力。
- 集成方式:@FeignClient 指定 fallbackFactory,当远端不可用或超时,自动进入降级分支。
- 熔断器工作原理(概念性说明):
- 关闭(Closed):正常放行,统计失败率与慢调用比例。
- 打开(Open):短路一段时间,拒绝新请求,快速失败。
- 半开(Half-Open):窗口期允许少量请求试探,若成功则回到关闭,否则继续保持打开。
- 配置要点(通用建议,需结合实际配置文件):
- 超时时间:控制调用最长等待时间。
- 错误阈值:连续错误达到阈值触发熔断。
- 恢复等待时间:打开后等待多长时间进入半开。
- 最小请求数:在滑动窗口内至少有多少请求才开始统计。
章节来源
- yudao-framework/yudao-spring-boot-starter-rpc/pom.xml
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/api/RuleBusinessApi.java
降级工厂(FallbackFactory)
- 作用:当 Feign 远端调用失败时,返回默认值或兜底数据,避免影响业务查询。
- 实现策略:
- 对于查询类接口:返回空集合/空分页或默认对象,保证前端稳定渲染。
- 对于修改类接口:返回错误提示或失败标记,避免产生脏数据。
- 对于复杂对象:构造最小可用 DTO,填充必要字段,确保序列化安全。
- 示例覆盖范围:包含规则绑定/解绑、规则列表、MAC/渠道/区域查询、设备数量统计等接口。
图示来源
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/api/RuleBusinessApi.java
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/api/fallback/RuleBusinessApiFallbackFactory.java
章节来源
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/api/RuleBusinessApi.java
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/api/fallback/RuleBusinessApiFallbackFactory.java
熔断触发条件与降级执行流程
- 触发 条件(Resilience4j 常见维度):
- 调用超时(由 Feign 超时配置决定)。
- 连续错误比例超过阈值(如 50%)。
- 慢调用比例超过阈值(如 P95 超过设定值)。
- 降级执行:
- fallbackFactory 返回预设的兜底实现。
- 返回 CommonResult.success()/error(),保持接口契约一致。
- 状态转换(概念示意):
- Closed → Open(错误率/慢调用超阈值且最小请求数达标)
- Open → Half-Open(等待时间到达)
- Half-Open → Closed(试探请求成功)
- Half-Open → Open(试探请求失败)
图示来源
- yudao-framework/yudao-spring-boot-starter-rpc/pom.xml
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/api/fallback/RuleBusinessApiFallbackFactory.java
依赖关系分析
- 网关异常处理器依赖通用响应体与错误码,确保对外输出一致。
- Feign 客户端依赖 Resilience4j 熔断器与降级工厂,形成“调用-熔断-降级”的闭环。
- 监控配置提供指标标签,便于观测应用整体健康度。
图示来源
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/handler/GlobalExceptionHandler.java
- yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/CommonResult.java
- yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/exception/enums/GlobalErrorCodeConstants.java
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/api/RuleBusinessApi.java
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/api/fallback/RuleBusinessApiFallbackFactory.java
- yudao-framework/yudao-spring-boot-starter-monitor/src/main/java/cn/iocoder/yudao/framework/tracer/config/YudaoMetricsAutoConfiguration.java
章节来源
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/handler/GlobalExceptionHandler.java
- yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/CommonResult.java
- yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/exception/enums/GlobalErrorCodeConstants.java
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/api/RuleBusinessApi.java
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/api/fallback/RuleBusinessApiFallbackFactory.java
- yudao-framework/yudao-spring-boot-starter-monitor/src/main/java/cn/iocoder/yudao/framework/tracer/config/YudaoMetricsAutoConfiguration.java
性能与监控
- 指标配置:通过 YudaoMetricsAutoConfiguration 设置 commonTags,便于按应用维度聚合指标。
- 建议关注指标:
- 断路器状态(open/closed/half-open)。
- 失败率、慢调用比例、调用时延分布。
- 降级触发次数与占比。
- 网关层异常总数与分类。
- 配置位置参考:application.yaml 中的 spring.config.import 与 yudao.* 配置加载顺序,确保 Nacos/本地配置正确生效。
章节来源
- yudao-framework/yudao-spring-boot-starter-monitor/src/main/java/cn/iocoder/yudao/framework/tracer/config/YudaoMetricsAutoConfiguration.java
- yudao-gateway/src/main/resources/application.yaml
故障排查指南
- 网关异常排查:
- 检查 GlobalExceptionHandler 是否被正确加载(@Order 优先级)。
- 确认响应未提前提交(response.isCommitted)。
- 核对错误码映射是否符合 GlobalErrorCodeConstants。
- Feign/熔断排查:
- 确认 @FeignClient 已指定 fallbackFactory。
- 检查 Resilience4j 配置(超时、错误阈值、最小请求数、恢复等待时间)。
- 观察断路器状态变化与降级触发频率。
- 降级行为验证:
- 通过压测或模拟远端不可用,确认降级返回的数据结构与业务兼容性。
- 对关键接口(如设备数量统计)验证兜底逻辑是否合理。
章节来源
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/handler/GlobalExceptionHandler.java
- yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/exception/enums/GlobalErrorCodeConstants.java
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/api/RuleBusinessApi.java
- yudao-module-rule/yudao-module-rule-api/src/main/java/cn/iocoder/yudao/module/rule/api/fallback/RuleBusinessApiFallbackFactory.java