高版本Spring Cloud中OpenFeign整合Hystrix熔断降级不生效的问题及解决方案

摘要

本文将介绍在使用高版本Spring Cloud(2020.0.x及以后),由于取消了Hystrix的集成,导致OpenFeign与Hystrix熔断降级不生效的问题。同时,也将给出解决该问题的方案,即添加feign.circuitbreaker.enabled=true配置。

正文

1. 背景

随着Spring Cloud框架的发展,高版本Spring Cloud(2020.0.x及以上)中取消了对Hystrix的集成和支持。这对之前依赖于Hystrix进行服务熔断和降级的项目带来了一些困扰,特别是在使用OpenFeign进行远程调用时。

2. 问题描述

在高版本Spring Cloud(2020.0.x及以上)中,原先使用OpenFeign与Hystrix进行熔断降级的配置方式已经失效。具体来说,之前常用的配置项"feign.hystrix.enabled"被移除,无法再通过该配置项来启用Hystrix相关功能。

2.1 症状

在忽略版本迁移的情况下,使用高版本Spring Cloud通过OpenFeign进行服务调用时,发现Hystrix的熔断降级策略不起作用,即使配置了相关的降级逻辑,也无法触发。

2.2 原因分析

主要原因是,自Spring Cloud 2020.0.0版本开始,已移除相关的Netflix OSS组件,自然就不再默认集成Hystrix,取消了对Hystrix的自动装配。因此,导致配置项`feign.hystrix.enabled`不再生效。

2020.0.0版本前,只需在启动类上添加@EnableHystrix注解,OpenFeign的熔断降级功能便可生效,因为@EnableHystrix注解中引用了@EnableCircuitBreaker注解,默认开启了熔断降级功能。而在2020.0.0版本后,@EnableCircuitBreaker注解已被废弃:

且在spring-configuration-metadata.json文件中找不到hystrix相关配置:

3. 解决方案

为了解决高版本Spring Cloud中OpenFeign整合Hystrix熔断降级不生效的问题,我们需要手动添加配置来启用Circuit Breaker模块。

具体解决方案如下:

3.1 添加依赖

首先,在项目的构建文件(例如Maven的pom.xml)中添加以下依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

3.2 配置开关

在项目的配置文件(例如application.yml或application.properties)中添加以下配置项:

feign:
  circuitbreaker:
    enabled: true

该配置项用于启用OpenFeign的Circuit Breaker模块,从而替代了之前的Hystrix。

3.3 编写熔断降级逻辑

在需要进行熔断降级处理的Feign客户端接口上,添加`@FeignClient`注解,并在`fallback`属性中指定对应的Fallback类(实现Feign客户端接口)。示例代码如下:

@FeignClient(name = "service-name", fallback = MyFallback.class)
public interface MyFeignClient {

    @GetMapping("/api/endpoint")
    String getEndpoint();
}
@Component
public class MyFallback implements MyFeignClient {
    
    @Override
    public String getEndpoint() {
        return "触发服务降级";
    }
}

4. 结论

通过以上的解决方案,我们可以在高版本Spring Cloud中成功启用OpenFeign的熔断降级功能,替代了取消的Hystrix集成。通过手动配置`feign.circuitbreaker.enabled`,并编写相应的降级逻辑,我们可以继续在项目中使用熔断降级策略,确保系统的稳定性。

  • 20
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Spring Cloud Hystrix是一个开源的熔断器框架,它能够帮助开发者有效地处理服务依赖的延迟和故障。熔断器的主要目的是在出现故障时提供一种优雅的降级机制,以避免整个系统的崩溃。 熔断降级Hystrix两个重要的概念。 熔断(Circuit Breaker)指的是在服务出现故障或错误率过时,自动地切换到指定的备用服务或返回事先定义好的错误结果,起到保护系统免受故障传播的影响的作用。当服务不可用或响应时间过长时,熔断器会打开,拒绝后续请求的访问,并尝试通过执行降级逻辑来快速响应客户端。一旦后续请求不再出现故障,熔断器将会进入半开状态,允许少量的请求通过以检测服务是否恢复正常。 降级(Degradation)指的是在系统资源不足或者访问量时,服务降级会关闭一些不重要的功能,以保证系统核心功能的可用性和稳定性。降级可以通过阻止非必要的调用、减少资源的消耗以及返回默认值或缓存结果来实现。降级需要提前定义好一些备用的逻辑,一旦系统资源紧张,就可以立即启用降级逻辑来保障系统的可用性。 总而言之,熔断降级都是为了保护系统免受故障的影响。熔断主要是针对服务故障和错误率过的情况,通过切换到备用服务或返回错误结果来保护系统。降级主要是在系统资源紧张或访问量的情况下,关闭一些不重要的功能来保证核心功能的可用性和稳定性。两者都是通过提前定义备用逻辑来保障系统的正常运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值