5.1 什么是Hystrix?
熔断机制是解决微服务架构中因等待出现故障的依赖方响应而形成任务挤压,.
最终导致自身服务瘫痪的一种机制,它的功能类似电路的保险丝,其目的是为了阻断故障,从而保护系统稳定性。Hystrix作为Spring Cloud中实现了熔断机制的组件,具有服务容错保护功能。
在分布式系统中,服务与服务之间的依赖错综复杂,一种不可避免的情况就是某些服务会出现故障,导致依赖于它们的其他服务出现远程调度的线程阻塞。
Hystrix 是 Netflix 公司开源的一个项目,它提供了熔断器的功能,能够阻止分布式系统中出现的联动故障。
Hystrix 是通过隔离服务的访问点阻止联动故障的,并提供了故障的解决方案,从而提高了整个分布式系统的弹性。
配置文件
在原来的 application.yml 配置的基础上修改
spring:
application:
name: eureka-consumer-feign-hystrix
eureka:
client:
service-url:
defaultZone: http://localhost:7000/eureka/
server:
port: 9003
feign:
hystrix:
enabled: true
创建回调类
创建 HelloRemoteHystrix 类实现 HelloRemote 中实现回调的方法
@Component
public class HelloRemoteHystrix implements HelloRemote {
@Override
public String hello(@RequestParam(value = "name") String name) {
return "Hello World!";
}
}
添加 fallback 属性
在HelloRemote类添加指定 fallback 类,在服务熔断的时候返回 fallback 类中的内容。
@FeignClient(name = "eureka-producer", fallback = HelloRemoteHystrix.class)
public interface HelloRemote {
@GetMapping("/hello/")
String hello(@RequestParam(value = "name") String name);
测试
依次启动 eureka-server、eureka-producer 和刚刚的 eureka-consumer-feign-hystrix 这三个项目。
访问:http://localhost:9003/hello/zxj
返回:[0]Hello, hjj!feign Fri Aug 21 21:50:50 CST 2020
说明加入 Hystrix 后,不影响正常的访问。接下来我们手动停止 eureka-producer 项目再次测试:
访问:http://localhost:9003/hello/zxj
返回:[fallback]Hello World!
这时候我们再次启动 eureka-producer 项目进行测试:
访问:http://localhost:9003/hello/zxj
返回:[0]Hello, hjj!feign Fri Aug 21 21:50:50 CST 2020
根据返回结果说明熔断成功。