述
记录一次配置 Sentinel 的过程,以及遇到的一些问题
Sentinel
Sentinel 是一个面向云原生微服务的高可用流控防护组件,作用跟 Hystrix 类似. 具体介绍可以看 Github
可视化界面
可视化界面的安装,先去 github 的 release 里面,选一个版本, 下载一个 jar 如下;
之后直接启动这个jar就可以了
| 1 | java -Dserver.port=8080 -Dscp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.7.2.jar | 
访问 localhost:8080 ,默认的账号密码都是 sentinel ,登录进去
   
默认是一个空的,没有应用的,到这儿可视化界面就安装成功了
Spring Boot 配置使用
依赖引入
Sentinel 要具体配置在每一个微服务上, 首先需要引入 Sentinel 的 starter 依赖1
2
3
4
5
6<!-- 阿里哨兵 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    <version>0.9.0.RELEASE</version>
</dependency>
配置修改
在 application 配置文件中,要做一些 sentinel 相关的配置,如下:1
2
3
4
5
6
7
8
9
10spring:
  application:
    name: orderApi
  cloud:
    sentinel:
      transport:
        # sentinel 会再启动一个端口,去和dashboard去通讯
        port: 8719
        # sentinel 控制台地址
        dashboard: localhost:8080
流控使用
资源声明
以流控为例, 首先要声明资源, Spring Boot 中,使用注解的方式就可以,如下:
| 1 | @PostMapping | 
使用 @SentinelResource 这个注解声明一个资源,里面的 value 值就是资源名称   
配置使用
声明好资源之后,还要对这个资源设置一些规则,比如每秒最多多少QPS,代码如下:
| 1 | // 设置流控规则 | 
上面代码是 kotlin 的, 步骤如下:
- 创建一个 FlowRule对象
- 然后设置一些规则,比如 resource就是我们定义的资源名, 然后grade是一个限流的策略,count就是请求的数量
- 声明一个集合把 FlowRule放到集合中去
- 最后调用 FlowRuleManager.loadRules()这个方法,让规则加载到系统中
这段代码要在 Spring Boot 项目启动后执行,至于使用启动器还是别的方式可以自己选,总之配置的代码要在启动后执行一次
执行完成后,规则就生效了,按照上面的配置QPS到10的时候服务就限流了
服务降级
方法声明
服务降级配置跟流控类似的,第一步还是在注解上面配置,注解如下:
| 1 | @SentinelResource(value = "createOrder",blockHandler = "createOrderOnBlock") | 
多配置了一个属性 blockHandler 值是 createOrderOnBlock, createOrderOnBlock 是降级处理的方法名,默认是在当前类的,如下:  
| 1 | public OrderInfo createOrderOnBlock(@RequestBody OrderInfo info, @AuthenticationPrincipal String username, BlockException ex) { | 
参数返回值和资源声明的方法都是一样的, 多了一个 BlockException ,服务熔断之后就会走这个降级的方法    
配置使用
跟流控一样的,降级也是要在代码中做一些配置的,如下:
| 1 | // 设置降级规则 | 
- 声明一个 DegradeRule对象
- 设置资源名,还有降级规则,熔断的持续时间等等(代码注释中都标明了)
- 之后放到一个 list 中
- 调用 DegradeRuleManager.loadRules()方法加载到系统中
服务降级默认是在 QPS 大于等于5的时候才会生效, 同样的这段代码也是要在系统启动之后执行.
关于限流和降级的配置先记录到这里