Spring Cloud Hystrix:封装于Netflix Hystrix,[hɪst'rɪks]
功能:服务降级,服务熔断
概念
断路器:circuit breaker
滚动时间窗(统计窗口):rolling window,断路器统计失败率的时间段,默认为最近10秒
半断开状态:在这个状态下,断路器会尝试放行一次服务,这次服务成功则进入闭合状态,否则进入断开状态
Hystrix 项目构建
1、配置Maven依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
2、给主类加上注解:@EnableCircuitBreaker
3、在Controller中使用
fallback:服务降级后调用的方法
@RestController
@RequestMapping("/my")
@DefaultProperties(defaultFallback = "defaultFallback") // 整个Controller默认的fallback
public class MyController {
@RequestMapping("api1")
@HystrixCommand // 当该服务抛出异常 或 超时,用defaultFallback()作为返回,即服务降级
public String api1() {
throw new RuntimeException();
}
@RequestMapping("api2")
@HystrixCommand(fallbackMethod = "fallback",commandProperties={
@HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds", value="2000")
}) // 指定fallback,指定超时时间,超时时间默认为1秒
public String api2() {
Thread.sleep(3000);
return "success";
}
@HystrixCommand(fallbackMethod = "fallback",commandProperties={
@HystrixProperty(name="circuitBreaker.enabled", value="true"), // 开启熔断机制
@HystrixProperty(name="circuitBreaker.requestVolumeThreshold", value="10"), // 在滚动时间窗内,失败10次,进入断开状态,默认值是20
@HystrixProperty(name="circuitBreaker.errorThresholdPercentage", value="60"), // 在滚动时间窗内,失败60%,进入断开状态,默认值为50
@HystrixProperty(name="circuitBreaker.sleepWindowInMilliseconds", value="5000") // 进入断开状态5秒后,进入半断开状态
})
@RequestMapping("api3")
public String api3() {
throw new RuntimeException();
}
public String defaultFallback(){
return "默认提示";
}
public String fallback(){
return "请稍后重试";
}
}
Hystrix Dashboard
1、添加Maven依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
2、给主类添加注解:@EnableHystrixDashboard
3、访问 localhost:8060/hystrix,可以查看各断路器的统计信息 和 状态