目录
前言
一、Sentinel下载
二、SpringBoot 整合 Sentinel
三、流控规则
章末
前言
小伙伴们大家好,上次使用OpenFeign时用到了 Hystrix实现熔断和限流的功能,但是发现该工具已经停止维护了,于是想到了Spring Cloud Alibaba开发的Sentinel工具,也可以实现流量控制,熔断降级,系统负载保护等
一、Sentinel下载
项目地址:Releases · alibaba/Sentinel · GitHub
1.直接下载 jar 包,到文件下载目录层级打开命令页面
2.使用 java -jar sentinel-dashboard-1.8.7.jar 启动sentinel
注:sentinel默认启动使用的是 8080 端口,如果担心被占用可以指定端口号
java -jar sentinel-dashboard-1.8.7.jar --server.port=8333
3.访问管理页面
访问 http://localhost:8333/#/login ,进到登陆页面,默认登陆用户密码都是sentinel
二、SpringBoot 整合 Sentinel
2.1 引入依赖
我这里制定了版本,因为用的父依赖中没有引用
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId><version>2.1.3.RELEASE</version></dependency>
2.2 配置信息
spring:...cloud:sentinel:transport:#控制台地址配置dashboard: localhost:8333#传输端口port: 8719#暴露所有的端点
management:endpoints:web:exposure:include: "*"
2.3 启动类开启服务发现
在启动类上加 @EnableDiscoveryClient 注解,打开服务发现功能
2.4 测试接口加注解@SentinelResource
@SentinelResource@PostMapping(value = "/login")public BaseResult login(String username, String password) {UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));...return BaseResult.success();}
2.5 启动项目
注:本地启动项目连接控制台后,发现看不到服务,可能是因为 Sentinel 本身懒加载的原因,就是说服务不被调用,sentinel 控制台是无法感知到服务的,需要手动调用一次接口刷新
检测到服务后的界面如下:
三、流控规则
3.1 基本介绍
资源名:唯一名称,默认的请求路径
针对来源:Sentinel 可以针对调用者进行限流,填写微服务名称,默认是default也就是不区分来源
阈值类型/单机阈值:
1.QPS 每秒钟的请求数量 : 当调用该api接口的QPS到达阈值时,启动限流
2.线程数:当调用该api的线程数达到阈值的时候,进行限流
是否集群:不需要集群
流控模式:挑默认的看下
1.直接: api达到限流条件时,直接限流
流控效果:
1.快速失败 : 直接失败,抛出异常
3.2 添加一个流控规则,限制单机阈值 QPS 为1
3.3 注意事项
在添加流控规则的时候,可能会遇到添加失败的场景,也就是点击添加后控制台上没有显示
产生原因:可能是客户端是否使用了低版本的 fastjson,低版本的 fastjson 可能会有此问题,建议使用和 Sentinel 相关组件一致版本的 fastjson。
解决方案: 我这里升级了 fastjson 的版本之后就可以正常添加了
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.58</version></dependency>
3.4 测试接口
因为设置的是每秒支持一个请求,所以测试的时候简单实现只要快速点击请求即可实现,结果如下,因为QPS 设置为1,所以每次通过的只有一个,拒绝 QPS 指的就是被限流请求失败的,同时到控制台看下日志,也会打出限流导致的异常日志
章末
后续再补充熔断,负载的使用,以及搭配OpenFeign使用
好了,文章到这里就结束了~