要在上篇<SpringCloud–hystrix服务降级简单实现>博客基础上 去完成熔断
不用引入的新的JAR的依赖
@Controller
public class HystrixController {
@Qualifier("restTemplate1")
@Autowired
RestTemplate restTemplate1;
@RequestMapping("/hystrix")
@ResponseBody
@HystrixCommand(commandProperties = {
@HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "10"),
@HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "10000"),
@HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "60")
} ,fallbackMethod = "errorNystrix")
String hystrix(Integer id) {
if(id==2){
throw new RuntimeException("出现异常");
}
return "执行完成" ;
}
String errorNystrix(Integer id) {
return "hystrix熔断,超时了执行此方法";
}
}
直接编写
circuitBreaker.requestVolumeThreshold:用来设置在滚动时间窗中,断路器熔断的最小请求数。例如,默认该值为20的时候,如果滚动时间窗(默认10秒)内仅收到19个请求,即使这19个请求都失败了,断路器也不会打开。
circuitBreaker.sleepWindowInMilliseconds:用来设置当断路器打开之后的休眠时间窗。休眠时间窗结束之后,会将断路器设置为“半开”状态,尝试熔断的请求命令,如果依然时候就将断路器继续设置为“打开”状态,如果成功,就设置为“关闭”状态。
circuitBreaker.errorThresholdPercentage:该属性用来设置断路器打开的错误百分比条件。默认值为50,表示在滚动时间窗中,在请求值超过requestVolumeThreshold阈值的前提下,如果错误请求数百分比超过50,就把断路器设置为“打开”状态,否则就设置为“关闭”状态。
效果:
开始能正常访问
多次访问服务降级后
在执行原有方法
已经熔断了
等待一段时间后有可以正常访问了