述
记录一次配置 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的时候才会生效, 同样的这段代码也是要在系统启动之后执行.
关于限流和降级的配置先记录到这里