记录学习Hystrix知识–20210929
使用的Hystrix的maven依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
Hystrix可以用来实现服务熔断降级和线程隔离,
工作流程:
当调用一个服务出现问题的时候,会开启一个时间窗口(保持时间是10s,默认参数值可以自定义–metrics.rollingStats.timeInMilliseconds),在10s内进行统计请求的次数,如果统计的请求数大于了配置的最小请求数(可配参数,默认是20–circuitBreaker.requestVolumeThreshold),如果达到了最小次数,再进行计算失败请求的次数占总请求数
的比例,如果比例值大于了阈值(可配参数,默认是50%–circuitBreaker.errorThresholdPercentage),那就会熔断该服务,不再调用这个服务,而是用服务降级指定的方法。之后会开启一个时间窗口,每隔5秒(可配参数,默认值是circuitBreaker.sleepWindowInMilliseconds)放过一次请求去请求服务,如果成功了,就重置断路器,否则继续保持这个状态。
Hystrxi使用到的参数可以在HystrixCommandProperties这个类里找到。
配置参数后面大多都有默认值。
写的一个demo方法
@Service
public class ReviewHystrixService {
private String CLIENT_URL = "http://eureka-client/client/port";
@Autowired
private RestTemplate restTemplate;
@HystrixCommand(
// 指定服务降级的方法
fallbackMethod = "fall1",
// 配置线程隔离的属性
threadPoolKey = "review1",
threadPoolProperties ={
@HystrixProperty(name = "coreSize",value = "5"),
@HystrixProperty(name = "MaxQueueSize", value = "10")
}
)
public String review(){
return restTemplate.getForObject(CLIENT_URL,String.class);
}
public String fall1(){
return "服务出现故障,暂时不能使用";
}
}
@HystrixCommand 这个注解里有对应的参数,忘了的话可以点进去看。