Springboot 实现接口限流

文章介绍了在高并发场景下,如何利用AOP和Guava的RateLimiter实现接口限流,防止服务器宕机。通过定义注解来设定不同接口的QPS,每次请求时从RateLimiter获取令牌决定是否放行,以此控制接口访问速度。
摘要由CSDN通过智能技术生成

当存在大量请求到来的时候为了避免服务器出现宕机的情况我们需要对一些请求拒绝服务操作,这里就需要我们实现接口限流。本次针对接口限流实现,未来将加入IP限流操作。

具体做法是aop思想,在访问某一个接口之前判断当前请求能否通过如果可以通过就放行,如果不能通过就拒绝操作。判断是否放行这里使用令牌桶算法实现,guava的RateLimiter对令牌桶算法进行封装具体方法如下:Guava-RateLimiter详解 - 简书 (jianshu.com)

既然对接口进行限流,我们需要引用注解,对不同的接口可能存在不同的QPS。注解定义如下:

其中key代表具体的访问接口

 切面的业务代码如下:

 我们对每个接口访问定义一个RateLimiter,当每有一个请求到达时候去RateLimiter获取令牌如果能获取到就调用接口,如果获取不到就拒绝接口访问。

Controller层代码:

 通过postman模拟接口访问

 结果如下:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值