hystrix是一个开源的 容错库。目的是为了防止雪崩效应,防止产生级联失败。
hystirx解决雪崩效应的主要方式
1,服务降级 ----》fallbacke模式(后备模式)
2,线程隔离 ----》壁仓模式(默认)
3,限流 ----》信号量模式
熔断机制触发以上方式
哪里用哪里加起步依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
@EnableCircuitBreaker//开启熔断机制
@SpringBootApplication
@EnableEurekaClient
@EnableCircuitBreaker//开启熔断机制
public class UserConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(UserConsumerApplication.class,args);
}
@Bean
@LoadBalanced //启动负载均衡
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
在需要使用的那个controller类中
@GetMapping("look")
//该注解修饰方法,当方法报错的时候进行调用指定的方法
@HystrixCommand(fallbackMethod = "defaultMethod")
public User look(){
User user = restTemplate.getForObject("http://user-provider/user/2", User.class);
return user;
}
//该方法返回值要和被@HystrixCommand注解修饰的返回值一样
public User defaultMethod(){
//创建一个默认的user对象
User user = new User();
user.setId(0);
user.setUsername("默认的数据");
return user;
}
//修饰到类上,指定默认的降级方法,作用到该类的所有的方法,降级方法不能有参数 @DefaultProperties(defaultFallback = "defaultAllMethod")
然后在对应方法上加上@HystrixCommand标签即可
配置
hystrix:
command:
default:
circuitBreaker:
#强制打开熔断器,默认是false 注意不要改成ture,不然所有请求都会被降级熔断
forceOpen: true
#触发熔断错误比例阈值,默认是50%
errorThresholdPercentage: 50
#熔断后休眠时长,默认是5000毫秒
sleepWindowInMilliseconds: 10000
#熔断触发最小请求次数,默认值是20
requestVolumeThreshold: 10
execution:
isolation:
thread:
#熔断超时设置,默认是1000毫秒
timeoutInMilliseconds: 2000
可以参考一下这个(14条消息) Spring Cloud配置熔断器_常年被追砍的博客-CSDN博客_springcloud熔断器配置