25、SpringCloudAlibaba实战:熔断限流:Sentinel流控规则

流控规则

    • 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>