25、SpringCloudAlibaba实战:熔断限流:Sentinel流控规则
本文深入解析Sentinel流量控制规则,涵盖QPS直接失败、线程数限流、关联与链路模式,以及Warm Up预热和排队等待等流控效果。通过Java代码示例和Sentinel Dashboard配置演示,手把手教你实现微服务高并发下的稳定限流策略。
流控规则
- 2.线程数直接失败
- 2.2 新增流控规则
- 2.3 测试该规则
- 3.关联
- 3.1 在 TestController 里面添加 api 接口
- 3.2 添加规则
- 3.3 测试规则
- 4.链路
- 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>