入门概念
可以看下文档,了解下熔断降级的相关概念和重要性。
Hystrix 简介
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)