1. 降级规则
官方文档描述:https://github.com/alibaba/Sentinel/wiki/
降级相关源码:com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule#passCheck
Sentinel的断路器没有半开状态
相关Issue :
https://github.com/alibaba/Sentinel/pull/553#issuecomment-478318196
1.1 降级策略-RT
RT
:平均响应时间
![image-20220109175702839](http://img.gangbb.cn/image-20220109175702839.png)
触发降级:就是打开断路器。
RT
默认最大4900ms- 可通过-Dcsp.sentinel.statistic.max.rt=xxx修改
1.2 降级策略-异常比例
![image-20220109180017720](http://img.gangbb.cn/image-20220109180017720.png)
1.3 降级策略-异常数
![image-20220109180120589](http://img.gangbb.cn/image-20220109180120589.png)
- 时间窗口<60秒可能会出问题
2. 热点规则
大致理解:在时间窗口内,一旦方法的指定索引参数的QPS达到了阈值,就会被限流。其实就是对请求方法的指定参数限流,或者指定参数的值限流
适用场景:某个接口的访问量特别大,但其实是接口的某个参数为某值是的访问量很高(
热点参数
),可以对该参数进行热点规则的设置和限流。使用注意:参数必须是基本类型或者String
相关源码:com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowChecker#passCheck
使用示例:
- 写一个测试接口
@GetMapping("test-hot")
@SentinelResource("hot")
public String testHot(
@RequestParam(required = false) String a,
@RequestParam(required = false) String b
) {
return a + " " + b;
}
- 访问之后可以在控制台找到他们的记录
http://127.0.0.1:8010/test-hot?a=1&b=2
![image-20220109182236249](http://img.gangbb.cn/image-20220109182236249.png)
- 设置热点规则
表示对第一个参数进行限流。(也就是testHot中的参数a)
再次多次访问http://127.0.0.1:8010/test-hot?a=1&b=2会被限流
- 高级配置
![image-20220109182744471](http://img.gangbb.cn/image-20220109182744471.png)
请求http://127.0.0.1:8010/test-hot?a=5&b=2,手速达不到QPS>1000,所以不会被限流
请求http://127.0.0.1:8010/test-hot?a=1&b=2,a的参数不等5,还是QPS>1就被限流了!