一 Hystrix 熔断器
在微服务架构中,根据业务拆分成一个个的服务,服务与服务之间可以通过RPC相互调用,在SpringCloud中可以用RestTemlate+ribbon和Feign来调用。为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,待哦用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。
为了解决这个问题,业界提出了熔断器模型
Netflix开源了Hystrix组件,实现了熔断器模式,SpringCloud对着一组件进行了整合。
当对特定的服务调用不可用达到一个阙值(Hystrix是5秒20次)熔断器会被打开。熔断器打开后,为了避免连锁故障,通过fallback方法可以直接返回一个固定值。
二 Feign增加Hystrix熔断器
2.1 Feign是自带熔断器的,但默认是关闭的,需要在配置文件中打开它,在配置文件里增加如下代码:
feign:
hystrix:
enabled: true
2.2.在Application里增加@EnableHystrix注解开启Hystrix,指定EurekaFeignServiceHystrix为熔断类
@FeignClient(value="eureka-provider",fallback = EurekaFeignServiceHystrix.class)
public interface EurekaFeignService {
@RequestMapping("/hello")
public String goHello();
}
2.3 创建EurekaFeignServiceHystrix熔断类,并实现对应的Feing接口
@Component
public class EurekaFeignServiceHystrix implements EurekaFeignService {
@Override
public String goHello() {
return "sorry,error";
}
}
2.4 运行server,此时断开服务提供者eureka-provider,显示如下
重新输入 http://localhost:8792/hello ,显示如下,证明调用熔断成功