一、Hystrix 基本工作组件
1、断路器
Hystrix 检查当前服务的熔断器开关是否开启,若开启,则执行降级服务 getFallback 方法;
2、依赖隔离
若熔断器开关关闭, 则 Hystrix 检查当前服务的线程池是否能接收新的请求,若超过线程池已满, 则执行降级服务 getFallback 方法
3、服务降级
若线程池接受请求,则 Hystrix 开始执行服务调用具体逻辑 run 方法。若服务执行失败, 则执行降级服务 getFallback 方法,并将执行结果上报 Metrics 更新服务健康状况。
二、RestTemplate 集成 Hystrix
1、RestTemplate 服务降级实现步骤
a) 在 pom.xml 文件中添加 Hystrix 依赖 spring-cloud-starter-hystrix;
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
b) 添加降级服务
使用@HystrixCommand(fallbackMethod = “getFallback”),fallbackMethod 是降级服务时使用的方法
这个方法需要返回值一样,参数一样
c) 在项目入口函数上添加@EnableHystrix;
d) 启动项目,访问注册中心 http://localhost:7400/getProviderFuture 可以观察到服务 provider 不可用时,实现了服务降级。
2、简化注解
@EnableEurekaClient === @EnableDiscoveryClient
@EnableHystrix === @EnableCircuitBreaker
@SpringCloudApplication===@SpringBootApplication+@EnableDiscoveryClient+@EnableCircuitBreaker
三、Feign 集成 Hystrix
1、Feign 服务降级实现步骤
a) 在 pom.xml 文件中添加 Hystrix 依赖 spring-cloud-starter-hystrix;
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
b) 编写一个@FeignClient 注解的 接口实现类,修改注解@FeignClientfallback 属性指向实现类;
c) 修改配置文件启用 Feign 中 hystrix 服务降级:
feign:
hystrix:
enabled: true
d) 修改入口函数类上的注解。
启动项目,访问注册中心 http://localhost:7500/getProviderFuture,可以观察到服务 provider 不可用时,
实现了服务降级