流控规则
-
- 1.QPS 直接失败
-
2.线程数直接失败
-
- 2.1 添加接口
- 2.2 新增流控规则
- 2.3 测试该规则
-
3.关联
-
- 3.1 在 TestController 里面添加 api 接口
- 3.2 添加规则
- 3.3 测试规则
-
4.链路
-
- 4.1 添加一个 Service
- 4.2 添加接口
- 4.3 声明资源
- 4.4 添加链路规则
- 4.5 测试该规则
-
5.预热 Warm Up
-
6.排队等待
-
流量的控制规则。
-
在簇点链路列表中,点击/hello 后面的流控按钮:
-
出现:
-
资源名:标识资源的唯一名称,默认为请求路径,也可以在客户端中使用 @SentinelResource 配置;
-
针对来源: Sentinel 可以针对服务调用者进行限流,填写微服务名称即 spring.application.name,默认为 default,不区分来源;
-
阈值类型、单机阈值:
QPS(Queries-per-second,每秒钟的请求数量):当调用该 api 的 QPS 达到阈值的时候,进行限流;
线程数:当调用该 api 的线程数达到阈值的时候,进行限流
是否集群:默认不集群; -
流控模式:
直接:当 api 调用达到限流条件的时,直接限流;
关联:当关联的资源请求达到阈值的时候,限流自己;
链路:只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,则进行限流)。 -
流控效果:
快速失败:直接失败;
Warm Up:根据 codeFactor(冷加载因子,默认值为 3)的值,从阈值/codeFactor,经过预热时长,才达到设置的 QPS 阈值;
排队等待:匀速排队,让请求匀速通过,阈值类型必须设置为 QPS,否则无效。
1.QPS 直接失败
- 演示下 QPS 直接失败设置及效果。点击簇点链路列表中/hello 请求后面的流控按钮:
- 上面设置的效果是,1 秒钟内请求/hello 资源的次数达到 2 次以上的时候,进行限流。点击新增完成该规则的设置。
- 现在,在浏览器访问:
http://localhost:8085/hello
- 当手速快点的时候(1 秒超过 2 次),页面返回 Blocked by Sentinel (flow limiting)。并且响应码为 429
2.线程数直接失败
2.1 添加接口
- 在 TestController 里面新建一个接口
//线程直接失败
@GetMapping("/thread")
public ResponseEntity<String>