Hystrix是一款Netflix开源的熔断中间件,能够提供断路,降级,监控等多种服务。
就如我们日常生活中的电路保险丝,当接入电源的电器过多,导致整体负载过大时,保险丝会自动熔断,以此保护电器不会受损。
而在微服务架构中,当一个服务接口不堪重负,出现超时或宕机等无法使用的情况时,下游服务因获取不到数据,导致服务不可用,然后恶性循环导致整个服务体系宕机,形成雪崩效应。此时熔断器就充当了保险丝的作用,在服务接口超时或不可用时,马上返回一个错误信息,让整个服务可以继续运行,保护了整个服务体系。
PS:本文Spring Boot为2.X版本
这里将会在上一篇Spring Cloud(四) :微服务间的互相调用和负载均衡实现(ribbon+restTemplate和feign)
的基础上进一步扩展。
用到的项目为
1.SpringCloudServiceCenter 注册中心
2.SpringCloudConfig 配置中心
3.SpringCloudServiceI 服务I
4.SpringCloudServiceIII 服务III
5.SpringCloudCustomerI ribbon
6.SpringCloudCustomerII feign
服务熔断
一.在ribbon中使用hystrix
SpringCloudCustomerI 基础上扩展
1.添加依赖
<!-- 熔断/降级 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
2.修改MyCustomerController.java。
添加如下内容
添加@HystrixCommand(fallbackMethod = "fallbackInfo")
注解,fallbackMethod
为服务不可用时将会调用的方法
@ResponseBody
@RequestMapping(value="/CgetServiceIData")
@HystrixCommand(fallbackMethod = "fallbackInfo")
public String getServiceIData() {
return getServiceI();
}
String fallbackInfo() {
return "The service is down!";
}
3.启动项SpringCloundCustomerIApplication.java
添加注解。
//两个里选一个即可
@EnableHystrix
@EnableCircuitBreaker
之前看各种博客时总能看到@EnableHystrix
和@EnableCircuitBreaker
交替出现,那么它们有什么区别呢?其实