项目简介
rate-limit[1] 是一个为 java 设计的渐进式限流工具。
目的是为了深入学习和使用限流,后续将会持续迭代。
特性
1 渐进式实现
2 支持独立于 spring 使用
3 支持整合 spring
4 支持整合 spring-boot
5 内置多种限流策略
快速开始
需求
1 jdk 1.7
2 maven 3.x+
maven 导入
入门例子
方法定义
限流注解放在方法上,指定对应的限制频率。
也可以定义在类上,默认下面的所有方法生效。方法上的优先级高于类。
默认为 60S 内,可以调用 1000 次。
这个例子中我们 2S 内最多调用 5 次。
代码测试
通过字节码获取方法对应的方法代理。
当调用超出限制时,默认抛出 异常。
这里默认使用的是令牌桶算法,所以会出现异常。
重复注解 @RateLimits
有时候我们希望同时做多个的限制:
(1)一分钟不超过 10 次
(2)一小时不超过 30 次
为了支持多个配置,我们引入了新的注解 ,可以指定一个 数组。
方法上同时使用 + 是可以同时生效的,不过为了简单,一般不建议混合使用。
指定引导类
等价于
下面我们来一起看一下 RateLimitBs 引导类。
引导类
作为引导类,便于用户自定义配置。
其中 rateLimit 内置 工具中的策略如下:
配置建议
1.
分布式系统,cacheService 建议使用基于 redis 的集中式缓存策略。
2.
configService 如果想更加灵活,可以基于数据库的配置查询
RateLimitBs 引导类
RateLimitBs 默认配置如下:
spring 整合
maven 引入
类定义
方法
和上面使用类似,直接在方法上声明 注解即可。
配置
通过 声明启用限流。
的属性配置和 RateLimitBs 属性是以一一对应的。
这里的属性值,都是对应的 spring bean 名称,支持用户自定义。
spring-boot 整合
maven 引入
使用
其他和 spring 保持一致。
缓存相关工具
cache: 手写渐进式 redis[2]
common-cache: 通用缓存标准定义[3]
redis-config: 兼容各种常见的 redis 配置模式[4]
lock: 开箱即用的分布式锁[5]
resubmit: 防重复提交[6]
rate-limit: 限流[7]
References
rate-limit: https://github.com/houbb/rate-limit
cache: 手写渐进式 redis: https://github.com/houbb/cache
common-cache: 通用缓存标准定义: https://github.com/houbb/common-cache
redis-config: 兼容各种常见的 redis 配置模式: https://github.com/houbb/redis-config
lock: 开箱即用的分布式锁: https://github.com/houbb/lock
resubmit: 防重复提交: https://github.com/houbb/resubmit
rate-limit: 限流: https://github.com/houbb/rate-limit/
领取专属 10元无门槛券
私享最新 技术干货