去掉不登录不能请求的限制_从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)

2405655b684c97836db002fba27d916b.png

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请求,再回来看下就有了项目的信息了

583f26e4b36e617c6678abd180850ba0.png

4. 配置流控规则

在sentinel的控制台,进入流控规则的菜单项

4.1 为用户登录接口配置规则

  • 资源名:默认请求路径
  • 针对来源:Sentinel可以针对调⽤者进⾏限流,填写微服务名称,默认default(不区分来源)
  • 阈值类型/单机阈值
    • QPS:(每秒钟请求数量)当调⽤该资源的QPS达到阈值时进⾏限流
    • 线程数:当调⽤该资源的线程数达到阈值的时候进⾏限流
  • 是否集群:是否集群限流

在这里将资源名配置为登录请求的api/api/users/login。为其设置QPS为2,也就是每秒的请求数不能超过2次

6f063ec42cb3a1bef05885103ef495cc.png

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拒绝连接

d5964faed1cc767eb5d43173a45f3b5c.png

然后看下sentinel控制台上实时监控和簇点链路,显示如下的信息,拒绝的QPS有两次

9a5bd88cbc406678379518c65cd61e3d.png

f5606968e9ae3e41d3d0ca38f9dc6bf0.png

5. 参考代码

  • user-cloud
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值