RT

RT-是平均响应时间(DEGRADE_GRADE_RT):当1S内持续进入5个请求时,对应时刻的平均响应时间(秒级)均超过阈值(count,以ms为单位),那么在接下的时间窗口(DegradeRule中的timeWindow,以s为单位)之内,对这个 方法的调用队徽自动熔断(抛出DegradeException)。注意Sentinel默认统计的RT上线是4900ms,超出此阈值的都会算作4900ms,若需要变更此上线可以在启动配置项中 -Dcsp.sentinek.statistic.max.rt=xxx来配置。

Sentinel降级_响应时间


一秒钟必须5个请求访问,并且平均响应时间要大于降级设置的阀值,这两个条件必须同时满足,如果满足后断路器将会打开,断路器一旦打开后后面的请求访问就会返回友好提示,然后等待设置的时间窗口期过了,自动关闭断路器,从而达到降级效果!

测试代码

@GetMapping("/testD")
public String testD()
{
try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); }
log.info("testD 测试RT");
return "------testD";
}

RT降级设置

Sentinel降级_响应时间_02


JMeter访问测试

Sentinel降级_程序代码_03


访问测试

Sentinel降级_程序代码_04


这里Jmeter每秒10个请求,不停的发送,这是大于第一个条件也就是1秒内请求5个,然后代码中线程休眠1秒,这也就是为了满足第二个条件,响应时间大于设定的RT值,那么这里从浏览器发出的请求将会进入降级,也就是返回友好界面!

异常比例

异常比例(DEGRADE_GRADE_EXCEPTION_RATIO):当资源的每秒请求数量>=5,并且每秒异常总数占通过量的比值超过阈值(DegradeRule中的count)之后,资源进入降级状态,即在接下来的时间窗口(DegradeRule中的timeWindow,以s为单位)之内,对这个方法的调用都会自动的返回,异常比例的阈值范围是0-1,代表0%-100%

Sentinel降级_程序代码_05


一秒钟必须5个请求访问,并且异常数大于降级设置的阀值,这两个条件必须同时满足,如果满足后断路器将会打开,断路器一旦打开后后面的请求访问就会返回友好提示,然后等待设置的时间窗口期过了,自动关闭断路器,从而达到降级效果!

测试代码

@GetMapping("/testD")
public String testD()
{
log.info("testD 测试RT");
int age = 10/0;
return "------testD";
}

异常比例设置

Sentinel降级_断路器_06


JMeter访问测试

Sentinel降级_程序代码_07


访问测试

Sentinel降级_程序代码_08


这里Jmeter每秒10个请求,不停的发送,这是大于第一个条件也就是1秒内请求5个,然后代码中每次报错,这也就是为了满足第二个条件,异常比例数大于设定的阈值,那么这里从浏览器发出的请求将会进入降级,也就是返回友好界面!如果把Jmeter停掉,在访问那么就直接报错

Sentinel降级_程序代码_09


这个报错就是我们自己程序代码报的错!

异常数

异常数(DEGRADE_GRADE_EXCEPTION_COUNT):当资源近1分钟的异常数目超过阈值之后进行熔断,注意由于统计时间窗口是分钟级别的,若timeWindow小于60s,这结束熔断状态任可能再进入熔断状态

Sentinel降级_响应时间_10


也就是1分钟内访问的请求的错误次数大于设定的阈值后自动进入降低!

设置异常数

Sentinel降级_断路器_11


浏览器访问测试

这里报错的测试代码不变,然后浏览器访问5次!都是下面这个界面

Sentinel降级_断路器_12


当请求第6次是,这里61秒内请求错误数也就大于5了,那么就开始降级

Sentinel降级_断路器_13


那么需要等待61秒的剩余时间窗口后才能关闭断路器!