Skip to main content
Version: 2.5.0

1. 概述

1.1 插件名称#

  • Sentinel插件

1.2 适用场景#

  • sentinel插件是网关用来对流量进行限流与熔断的可选选择之一。
  • sentinel插件为网关熔断限流提供能力。

1.3 插件功能#

  • 流量控制
  • 请求熔断和服务降级

1.4 插件代码#

  • 核心包 shenyu-plugin-sentinel.

  • 核心类 org.apache.shenyu.plugin.sentinel.SentinelPlugin

1.5 添加自哪个shenyu版本#

  • 2.4.0

2. 如何使用插件

2.1 插件使用流程图#

2.2 导入pom#

  • 在网关的 pom.xml 文件中添加 sentinel 依赖。
<!-- apache shenyu sentinel plugin start--><dependency>  <groupId>org.apache.shenyu</groupId>  <artifactId>shenyu-spring-boot-starter-plugin-sentinel</artifactId>  <version>${project.version}</version></dependency><!-- apache shenyu sentinel plugin end-->

2.3 启用插件#

  • 在 基础配置 --> 插件管理 --> sentinel,设置为开启。

2.4 配置插件#

2.4.1 插件配置#

2.4.2 选择器配饰#

用于对流量第一次筛选,不需要特殊处理字段。

2.4.3 规则配置#

用于对流量最终筛选,有规则处理逻辑。

fielddefault valuefield typedesc
degradeRuleCountDoule降级阈值
degradeRuleEnable1(enabled)Integer(是否开启流控 (1或0) ) :是否开启sentinel的流控。
degradeRuleGrade0(slow call ratio)Integer(断路器策略): 支持秒级RT/秒级Error Ratio/分钟级Error Count策略。
degradeRuleMinRequestAmount5Integer断路器最小请求量。
degradeRuleSlowRatioThreshold1.0dDouble退化的慢比率阈值。
degradeRuleStatIntervals1Integer降级的状态间隔。
degradeRuleTimeWindowInteger退化时间(单位:秒)。
flowRuleControlBehavior0(direact reject)Integer效果(直接拒绝/排队/慢启动/冷启动+匀速器),不支持调用关系流控。
flowRuleControlBehavior-direct rejection by defaultdirect rejection by default (直接拒绝)
flowRuleControlBehavior-warm upwarm up (冷启动)
flowRuleControlBehavior-constant speed queuingconstant speed queuing (匀速排队,漏桶算法 )
flowRuleControlBehavior-preheating uniformly queued冷启动+匀速器,除了让流量缓慢增加,还还控制的了请求的间隔时间,让请求均匀速度通过。)
flowRuleMaxQueueingTimeMs500msInteger最大排队等待时长(在 “preheating uniformly queued“, “constant speed queuing“ 模式生效)。
flowRuleWarmUpPeriodSec10Integer冷启动预热时长(秒) (在 “preheating uniformly queued” “warm up” 模式下生效)
flowRuleCountInteger哨兵流控制计数。
flowRuleEnable1(enabled)Integer是否开启哨兵流控功能。
flowRuleGrade1(QPS)Integer限流阈值的类型(QPS 或 Thread Count)。
fallbackUriString断路后降级的uri。

2.5 示例#

2.5.1 使用sentinel进行流量控制#

2.5.1.1 插件配置#

  • 在 基础配置 --> 插件管理 --> sentinel,设置为开启。

2.5.1.2 选择器配置#

2.5.1.3 规则配置#

关于选择器和规则配置的更多说明,请参考:选择器和规则管理, 这里只对部分字段进行了介绍。

使用qps限流策略,并且qps为10,拒绝策略为直接拒绝。

代码如下:

@RestController@RequestMapping("/order")@ShenyuSpringMvcClient("/order")public class OrderController {
    /**     * Save order dto.     *     * @param orderDTO the order dto     * @return the order dto     */    @PostMapping("/save")    @ShenyuSpringMvcClient("/save")    public OrderDTO save(@RequestBody final OrderDTO orderDTO) {        orderDTO.setName("hello world save order");        return orderDTO;    }}

2.5.1.4 通过Apache Jmeter请求网关#

  • Jmeter线程组配置

  • Jmeter http请求配置

2.5.1.5 验证结果#

2.5.2 使用sentinel进行熔断降级控制#

2.5.2.1 插件配置#

  • 在 基础配置 --> 插件管理 --> sentinel,设置为开启。

2.5.2.2 选择器配置#

2.5.2.3 规则配置#

当degrade strategy为exception number时,degradeRuleSlowRatioThreshold无效。 当单位时间内的最小请求数为 5,且请求发生的异常大于 3 时,将触发断路器。

当degrade strategy为slow call ratio时,degradeRuleSlowRatioThreshold有效,degradeRuleCount表示RT(例如200)。

代码如下:

@RestController@RequestMapping("/order")@ShenyuSpringMvcClient("/order")public class OrderController {
    /**     * Save order dto.     *     * @param orderDTO the order dto     * @return the order dto     */    @PostMapping("/save")    @ShenyuSpringMvcClient("/save")    public OrderDTO save(@RequestBody final OrderDTO orderDTO) {
        Random random = new Random();        int num = random.nextInt(100);        if (num > 40) {            throw new RuntimeException("num great than 20");        }        orderDTO.setName("hello world save order");        return orderDTO;    }
}

2.5.2.4 通过Apache Jmeter请求网关#

  • Jmeter线程组配置

  • Jmeter http请求配置

2.5.2.5 验证结果#

3. 如何禁用插件

  • 在 基础配置 --> 插件管理 --> sentinel,设置为关闭。