Spring Cloud Open Feign系列【12】Feign 整合Hystrix实现熔断降级

文章目录

  • 入门概念
  • Hystrix 简介
    • Hystrix 状态
  • Hystrix 有什么用?
  • 入门案例
    • 方式1 直接实现Feign 客户端接口
  • 方式2 实现FallbackFactory 接口

入门概念

服务雪崩效应及容错方案

可以看下文档,了解下熔断降级的相关概念和重要性。
 

Hystrix 简介

github

Hystrix 状态

Hystrix 不再处于积极开发阶段,目前处于维护模式。

Hystrix(版本 1.5.18)足够稳定,可以满足 Netflix 对我们现有应用程序的需求。

可以从版本发布看到,自从2018年来,已经停止更新了,但是目前还是可用,而且Spring Cloud Open Feign 也是从2020.X 版本才移除这些组件,其他类似Sentinel 限流组件的使用方式也差不多,所以这里还是看下Hystrix 怎么使用的。
 

Hystrix 有什么用?

Hystrix 旨在执行以下操作:

  • 通过第三方客户端库访问(通常通过网络)的依赖项,提供对延迟和故障的保护和控制。
  • 解决复杂分布式系统中的级联故障。
  • 快速失败并快速恢复。
  • 在可能的情况下回退并优雅地降级。
  • 实现近乎实时的监控、警报和操作控制。

入门案例

低版本的 Open Feign默认引入了Hystrix包,主需要配置就可以开启了:

feign:
  hystrix:
    enabled: true

在配置Feign 客户端配置Hystrix时,可以指定fallback或者fallbackFactory
 

方式1 直接实现Feign 客户端接口

直接写一个类实现Feign 客户端接口,重写方法,这些方法在发生熔断时,会返回方法中的返回值给客户端。

直接直接返回了Null ,实际开发中,应该封装统一的熔断结果集。

@Component
public class HystrixOrderFeign implements OrderFeign {
   
     

    @Override
    public List<Order> insertOrder(Long accountId, String commodityCode, Long count, Long money) {
   
     
        return null;
    }

    @Override
    public Order post(Order order) {
   
     
        return null;
    }
}

然后在@FeignClient中指定fallback属性为上面的类即可。

@FeignClient(name = "order-service", fallback = HystrixOrderFeign.class)

方式2 实现FallbackFactory 接口

还通过实现FallbackFactory接口,指定泛型为Fegn 接口,然后实现其方法。使用工厂类,可以获取到当前发生的异常信息。

@Component
public class OrderFeignFallbackFactory implements FallbackFactory<OrderFeign> {
   
     
    @Override
    public OrderFeign create(Throwable throwable) {
   
     
        return new OrderFeign() {
   
     
            @Override
            public List<Order> insertOrder(Long accountId, String commodityCode, Long count, Long money) {
   
     
                return null;
            }
            @Override
            public Order post(Order order) {
   
     
                return null;
            }
        };
    }
}

然后配置下fallbackFactory属性就可以了。

@FeignClient(name = "order-service", configuration = {
   
     BBB.class}, fallbackFactory = OrderFeignFallbackFactory.class)

版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: