java中api限流_Spring Boot - 实现API限流

¶ Spring Boot - 实现API限流 高并发的三板斧: 缓存,降级和限流。本文只是关于限流的一个Demo,限流可以有很多方式,具体可以看分布式限流的章节。@pdai 注意: RateLimiter只是针对单机方案限流;

分布式通常可以通过Redis+Lua+AOP方案;此方案源码参考: https://github.com/realpdai/springboot-limit-demo

本例子考虑落地,采用一个别人开源的小框架,参考原文: https://www.ctolib.com/forezp-DistributedLimit.html

¶ 项目目的 这个项目是一个Api限流的解决方案,采用的是令牌桶的方式。如果使用的Redis则是分布式限流,如果采用guava的LimitRater,则是本地限流。 分2给维度限流,一个是用户维度,一个Api维度,读者可自定义。仅支持Spring Boot项目。

¶ 如何使用

在boot-example工程,有完整的案例。可在Controller上限流,也可以在SpringMvc的Interceptor或者Servlet的Filter上限流。

¶ 开启限流

在pom文件加上jar包:

有2中方式,本地限流,只需要配置limit.type=local;采用Redis限流,配置limit.type=redis,以及redis的配置,如下:

¶ Controller上使用,基于注解、AOP

在Controller上加 @Limit注解,其中identifier为识别身份的,key为限流的key,limtNum为限制的次数,seconds为多少秒,后2个配置的作用是在多少秒最大的请求次数 。其中identifier和key支持Spel表达式。如果仅API纬度,则identifier 为空即可;如果仅用户纬度,key为空即可。

仅次操作就可以限流了。

另外如果是以注解的形式进行限流,如果以identifier即请求用户维度去限流,可以动态的设置的identifier的值,示例如下:

¶ 在Web层的Interceptor、Filter上使用

直接贴代码了,比较简单。

注册一下Interceptor:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值