简介:当前Sentinel可以实现 流控 降级熔断 热流key限制 自定义兜底方法 限流等 对服务提供者进行相关控制
流控
流控模式
直接模式
关联模式:当被关联的资源达到阈值时 当前资源会被限制请求【testA关联testB 当testB访问达到阈值,testA的访问会被限制】
流控效果
1:直接--->快速失败【默认的流控处理】直接失败,抛出异常:Blocked by Sentinel (flow limiting)
2:预热:阈值除以coldFactor(默认值为3),经过预热时长后才会达到阈值\
默认coldFactor为3,即请求QPS从threshold/3开始,经预热时长逐渐升至设定的QPS阈值。
3:匀速排队,让请求以均匀的速度通过,阈值类型必须设置成QPS,否则无效::::::设置含义:/testB每秒1次请求,超过的话就排队等待,等待的超时时间为20000毫秒【等待毫秒数 自己设置】
降级熔断
降级规则
========================================================================
时间窗口默认为1分钟
========================================================================
RT(平均响应时间,秒级)
平均响应时间 (DEGRADE_GRADE_RT):**超过阈值** **且** **时间窗口内的请求>=5**,两个条件同时满足后触发降级,窗口期过后关闭断路器
RT 最大4900 ms,更大的需要通过启动配置项
-Dcsp.sentinel.statistic.max.rt=xxx 来配置
========================================================================
异常比例【秒级】
QPS>=5且异常比例(秒级统计)超过阈值时,触发降级;时间窗口结束后,关闭降级
========================================================================
异常数:当资源近1分钟的异常数 超过阈值以后就会进行熔断【统计时间是分钟级别的所以时长窗口不能小于60秒】
热流key限制
第一步:配置热点规则
第二步:编写controller代码 配置某个接口 使用此规则 并配置兜底方法
/**
* @SentinelResource注解所对应的
* value 属性的值 必须跟配置的热点规则的资源名一致
* blockHandler 属性配置的是当前的兜底方法
* @param username
* @return
*/
@GetMapping("/testE")
@SentinelResource(value = "testE",blockHandler = "dealTestE")
public String testE(String username){
return "E方法的调用";
}
//兜底方法
public String dealTestE(String username,BlockException blockException){
return "------------运行兜底方法--------------";
}
第三步:访问测试 只要存在第一个参数 10秒内 超过两次的访问 就会运行兜底方法