Feign + Hystrix 实现降级 + 熔断

一、概述

"Feign 本身只支持降级(fallback),不支持熔断

Feign + Hystrix 才能同时实现降级 + 熔断

新项目用 Sentinel / Resilience4j 替代 Hystrix。"

二、Feign 单独 vs Feign + Hystrix 严格对比

维度 Feign 单独 Feign + Hystrix Feign + Sentinel
降级(Fallback) 支持 ✅ 支持 ✅ 支持
熔断(CircuitBreaker) 不支持 ✅ 支持 ✅ 支持(更强)
限流 ❌ 不支持 ✅ 支持 ✅ 支持(5 大功能)
隔离 ❌ 不支持 ✅ 支持(线程池) ✅ 支持
项目 简单场景 老项目 新项目推荐

三、Feign 单独实现降级不依赖 Hystrix

3.1 完整代码
复制代码
// 老哥 mpvs 关键时点:Feign 单独 + 降级(不用 Hystrix)
@FeignClient(name = "data-mask-service",
             fallback = DataMaskFallback.class)  // ⚠️ 降级类
public interface DataMaskFeignClient {
    
    @GetMapping("/api/mask/query")
    Result<MaskData> queryMaskData(@RequestParam String bankCode, 
                                     @RequestParam String dataId);
    
    @PostMapping("/api/mask/exec")
    Result<Void> executeMask(@RequestBody MaskRequest request);
}

// 降级类(实现 Feign 接口)
@Component
public class DataMaskFallback implements DataMaskFeignClient {
    
    @Override
    public Result<MaskData> queryMaskData(String bankCode, String dataId) {
        log.warn("屏蔽服务降级, bankCode={}, dataId={}", bankCode, dataId);
        // ⚠️ 返回兜底数据
        return Result.ok(new MaskData("UNKNOWN", "服务降级"));
    }
    
    @Override
    public Result<Void> executeMask(MaskRequest request) {
        log.warn("屏蔽执行降级, request={}", request);
        return Result.ok();
    }
}
3.2 配置文件
复制代码
# application.yml
feign:
  client:
    config:
      default:
        connectTimeout: 3000
        readTimeout: 5000
  
  # ⚠️ 关键:开启 Feign 降级
  circuitbreaker:
    enabled: true

注意

  • Feign 单独 + 降级 = 服务异常时返回兜底数据
  • 没有熔断 ------故障服务一直返回兜底数据不会自动恢复
  • 新项目推荐 = Feign + Sentinel(同时实现降级 + 熔断 + 限流 + 隔离)

四、3 大方案严格对比

4.1 方案 1:Feign 单独(最简单
复制代码
# 优点:最简单,不用 Hystrix
# 缺点:只支持降级,不支持熔断
feign:
  circuitbreaker:
    enabled: true

适用场景

  • 小项目(连接数 < 100)
  • 不要求高可用(故障返回兜底数据即可)
  • 金融项目慎用
4.2 方案 2:Feign + Hystrix(老项目常用
复制代码
# 优点:完整 4 大机制(降级 + 熔断 + 隔离 + 限流)
# 缺点:Hystrix 停止维护
feign:
  hystrix:
    enabled: true

适用场景

  • ✅ 老项目
  • 需要熔断(避免雪崩)
  • 新项目不推荐(Hystrix 停止维护)
4.3 方案 3:Feign + Sentinel(新项目推荐
复制代码
# 优点:5 大功能(流量控制 + 熔断降级 + 热点参数 + 系统保护 + 来源控制)
# 缺点:需要新增依赖
feign:
  sentinel:
    enabled: true

适用场景

  • 新项目
  • Spring Cloud Alibaba 项目新版推荐
  • 需要更多功能(5 大功能)

五、Feign + Sentinel 完整实战新项目推荐

5.1 引入依赖
复制代码
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-sentinel-feign</artifactId>
</dependency>
6.2 配置文件
复制代码
feign:
  sentinel:
    enabled: true  # ⚠️ 关键:开启 Sentinel
  client:
    config:
      default:
        connectTimeout: 3000
        readTimeout: 5000
6.3 Feign 接口 + Sentinel 降级
复制代码
// 老哥 mpvs 关键时点(新版)
@FeignClient(name = "data-mask-service",
             fallback = DataMaskFallback.class)
public interface DataMaskFeignClient {
    
    @GetMapping("/api/mask/query")
    Result<MaskData> queryMaskData(@RequestParam String bankCode, 
                                     @RequestParam String dataId);
}

// 降级类
@Component
public class DataMaskFallback implements DataMaskFeignClient {
    
    @Override
    public Result<MaskData> queryMaskData(String bankCode, String dataId) {
        return Result.ok(new MaskData("UNKNOWN"));
    }
}
6.4 Sentinel 控制台
复制代码
http://localhost:8080/sentinel
# 配置规则:
# - 流控规则:QPS 100
# - 熔断规则:错误率 50% 熔断
# - 热点规则:参数限流
# - 系统保护:CPU / Load
# - 来源控制:按调用方限流

七、3 大方案 4 大经典面试追问

追问 1:Feign 不依赖 Hystrix 可以吗?

"可以 ------Feign 单独支持降级 (fallback)。但不支持熔断 ------故障服务一直返回兜底数据,不会自动恢复金融项目慎用。"

追问 2:Feign + Hystrix 怎么工作?

"Feign 调用时,Hystrix 拦截 ------失败率超 50% 触发熔断 ------5 秒后重试 ------Hystrix 同时实现降级 + 熔断 ------Feign 只负责远程调用,Hystrix 负责容错。"

追问 3:新项目用 Hystrix 还是 Sentinel?

"新项目用 SentinelSpring Cloud Alibaba 主推 )。Hystrix 已停止维护Netflix Hystrix 2018 年停止更新 )。Sentinel 5 大功能(流量控制 + 熔断降级 + 热点参数 + 系统保护 + 来源控制)。"

追问 4:Feign 降级和 Hystrix 降级区别?

"Feign 降级 ------服务不可用时返回兜底静态 )。

Hystrix 降级 ------服务不可用 + 熔断 ------返回兜底动态5 秒后重试 )。

Feign 降级没有自动恢复,Hystrix 降级会自动恢复5 秒后重试)。"

八、记忆口诀

"Feign 单独只降级"

"Feign + Hystrix 降级 + 熔断"

"Feign + Sentinel 5 大功能(新项目推荐)"

"Hystrix 已停止维护,新项目别用"