从0到1学SpringCloud第九篇:登录限流
作者:互联网
文章内容输出来源:拉勾教育Java高薪训练营
1. 前言
1.1 说明
本文将针对于用户登录接口进行限制它的请求频率,进行限流防刷。使用到了Sentinel进行相应的实践应用。
1.2 什么是Sentinel
Sentinel 是阿里巴巴开源的,面向分布式服务架构的高可用防护组件。主要以流量为切入点,从流量控制、流量整形、熔断降级、系统自适应保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。
Sentinel 分为两个部分:
- 核⼼库:(Java 客户端)不依赖任何框架/库,能够运⾏于所有 Java 运⾏时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的⽀持
- 控制台:(Dashboard)基于 Spring Boot 开发,打包后可以直接运⾏,不需要额外的 Tomcat 等应⽤容器
2. 安装sentinel
2.1 下载jar包
进入github地址找到jar包进行下载,直达地址
备注:如果github上下载太慢,我使用了1.7.1版本的,并上传了。可以从这里获取:直达地址
2.2 启动
java -jar sentinel-dashboard.jar &
2.3 登录控制台
- 访问地址:http://localhost:8080
- 输入账号密码登录(默认是sentinel/sentinel)
3. 项目配置sentinel
网关项目作为流量的入口,所以考虑在这个项目lagou-cloud-gateway-9002
中进行配置
3.1 pom.xml引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
3.2 application.yml中增加sentinel配置
- 其中dashboard指的是sentinel控制台的访问地址
- 其中port指的是sentinel会在该端⼝启动http server,这样控制台定义的⼀些限流等规则才能发送传递过来。这里定义了8719,如果端⼝被占⽤,那么会依次+1
spring:
cloud:
sentinel:
transport:
dashboard: 127.0.0.1:8080
port: 8719
management:
endpoints:
web:
exposure:
include: "*"
# 暴露健康接口的细节
endpoint:
health:
show-details: always
3.3 重新启动项目
3.4 进入sentinel的控制台查看
刚开始没看到相关的项目信息,因为有懒加载的原因。这时你就到登录页面上登录一下,调用一下api请求,再回来看下就有了项目的信息了
4. 配置流控规则
在sentinel的控制台,进入流控规则的菜单项
4.1 为用户登录接口配置规则
- 资源名:默认请求路径
- 针对来源:Sentinel可以针对调⽤者进⾏限流,填写微服务名称,默认default(不区分来源)
- 阈值类型/单机阈值
- QPS:(每秒钟请求数量)当调⽤该资源的QPS达到阈值时进⾏限流
- 线程数:当调⽤该资源的线程数达到阈值的时候进⾏限流
- 是否集群:是否集群限流
在这里将资源名配置为登录请求的api/api/users/login
。为其设置QPS为2,也就是每秒的请求数不能超过2次
4.2 对用户登录请求处理
为测试的方便,在用户服务的用户登录的请求方法中增加上睡眠2s,好用于观察是否生效
@PostMapping("login")
public String login(HttpServletResponse response, @RequestParam String email, @RequestParam String password) {
try {
Thread.sleep(2000);
}catch (Exception e) {
e.printStackTrace();
}
}
4.3 测试
- 进入登录页面,打开浏览器的控制台。然后输入账号和密码(错误的密码),连续快速点击登陆按钮
可以看到浏览器控制台的登录请求,前两次是正常的,后面两次处理失败,http状态为429拒绝连接
然后看下sentinel控制台上实时监控和簇点链路,显示如下的信息,拒绝的QPS有两次
5. 参考代码
标签:请求,登录,SpringCloud,第九篇,Sentinel,限流,sentinel,控制台 来源: https://blog.csdn.net/yaohuiye/article/details/112227287