Sentinel版本:1.8.0
1.8.0 对熔断特性做了大量升级,低于此版本的谨慎参考
最大 RT(即最大的响应时间):请求的响应时间大于RT则统计为慢调用。
当单位统计时长(默认1秒)内,请求数目大于设置的最小请求数目,并且慢调用的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。
经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求响应时间小于设置的慢调用 RT 则结束熔断,若大于设置的慢调用 RT 则会再次被熔断。
写一个接口,通过sleep参数来决定是否睡眠1秒。
传 true 则触发睡眠,请求时间 > RT
传 false 则直接返回,请求时间 < RT
@GetMapping("/order1")
public String order1(boolean sleep){
if (sleep){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return "order1";
}
Blocked by Sentinel (flow limiting)
当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数,并且异常的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。异常比率的阈值范围是 [0.0, 1.0],代表 0% - 100%。
整个逻辑跟上一步的慢调用比例基本类似,这里就不再画图了
测试例子:
修改上面的接口,通过error判断是否抛出异常
@GetMapping("/order1")
public String order1(boolean error) throws Exception {
if (error){
throw new Exception("抛出异常");
}
return "order1";
}
Blocked by Sentinel (flow limiting)
当单位统计时长内异常数目超过阈值之后会自动进行熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。
异常降级仅针对业务异常,对 Sentinel 限流降级本身的异常(BlockException)不生效