概述

:::tips

  • 直接:统计当前资源的请求,当前资源的请求触发QPS阈值时对当前资源直接限流,是默认模式
  • 关联:统计与当前资源关联的另一个资源的请求,另一个资源的请求触发QPS阈值时对当前资源进行限流
  • 链路:统计从指定资源访问到当前资源的请求,指定资源访问到当前资源的请求触发QPS阈值时对指定资源进行限流 :::

    直接模式

    :::tips 直接模式:统计当前资源的请求,当前资源的请求触发QPS阈值时对当前资源直接限流,是默认模式

点击资源后面的流控按钮,就可以填写限流规则
image.png
其含义是限制/order/{id}资源的单机QPS(每秒并发)阈值为2,即每秒只允许2次请求,超出的请求会被拦截并报错 :::

关联模式

:::tips 关联模式:统计与当前资源关联的另一个资源的请求,另一个资源的请求触发QPS阈值时对当前资源进行限流

点击资源后面的流控按钮,然后点击高级选项,选择关联模式,就可以填写限流规则
image.png
其含义是当/write资源的访问量触发单机QPS(每秒并发)阈值时,就会对/read资源进行限流,避免影响/write资源 :::

链路模式

介绍

:::tips 链路模式:统计从指定资源访问到当前资源的请求,指定资源访问到当前资源的请求触发QPS阈值时对指定资源进行限流

例如有两条请求链路:/test1/test2,两个资源都需要访问/common资源,如果只希望限制从/test2进入到/common的请求,则可以这样配置
image.png
其含义是当/test2访问/common的访问量触发单机QPS(每秒并发)阈值时,会对/test2的请求进行限流 :::

添加资源标记

:::tips 默认情况下,Service实现类中的方法是不被Sentinel监控的,需要通过@SentinelResource注解来标记要监控的方法,并指定注解的value属性作为自定义的资源名称 :::

  1. @SentinelResource(value = 资源名称)
  2. public void query(){
  3. System.err.println("查询商品");
  4. }

关闭资源聚合

:::tips 链路模式中,是对不同来源的两个链路做监控。但是Sentinel默认会给进入SpringMVC的所有请求设置为同一个资源,会导致链路模式失效,所以需要关闭Sentinel对SpringMVC的资源聚合,在微服务的配置文件中添加配置 :::

  1. spring:
  2. cloud:
  3. sentinel:
  4. #关闭Sentinel对SpringMVC的资源聚合
  5. web-context-unify: false

使用

:::tips 配置完前面的内容之后,就重启这个微服务,然后进入浏览器访问需要调用Service实现类的API,然后在Sentinel中就可以看到出现了两个资源,两个资源下面都可以看到标记资源,点击标记资源需要后面的流控按钮,然后点击链路模式,填写一个入口资源,如果从这个入口资源访问标记资源的请求超出QPS阈值,就会被限流
image.png :::