# 基于Google RateLimiter封装的单机版限流组件 **Repository Path**: gwqin/ratelimiter-starter ## Basic Information - **Project Name**: 基于Google RateLimiter封装的单机版限流组件 - **Description**: 基于Springboot+RateLimiter封装的单机版限流组件 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-02-03 - **Last Updated**: 2024-07-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 限流启动器使用说明 **使用前需了解: 1、本模块适用于单机模式的限流,不支持分布式限流,相关限流配置需要根据单机的性能来评估设置。 2、本模块需要在web servlet场景下并且基于Springweb MVC框架加载使用。** #### 一、添加maven依赖 ~~~xml com.beta ratelimiter-starter 1.0.2-SNAPSHOT ~~~ #### 二、添加限流配置 目前支持的全部配置及默认值如下: ~~~properties ##接口级限流配置 #接口级限流开关,必配 ratelimiter.filter.uri.enable=true #接口限流过滤器order,数字越小优先级越高,默认为1,非必配 ratelimiter.filter.uri.order=1 #接口级限流过滤器配置,格式:url1:限流值1,url2:限流值2,必配,支持动态刷新 #例如:配置为 ratelimiter.filter.uri.methods=/a/b/c/d:300 表示/a/b/c/d接口的1秒钟最大访问量为300次 #注意:url支持Apache Ant的样式路径。 #例如:配置为 ratelimiter.filter.uri.methods=/a/b/c/d:300,/a/b/c/e:300 可以合并配置成 ratelimiter.filter.uri.methods=/a/b/c/**:300 ratelimiter.filter.uri.methods= ########################################################## ##用户级限流配置 #用户级限流开关,必配 ratelimiter.filter.user.enable=true #用户限流过滤器order,数字越小优先级越高,默认为2,非必配 ratelimiter.filter.user.order=2 #用户级限流过滤器配置,格式:url1:限流值1,url2:限流值2,必配,支持动态刷新 #例如:配置为 ratelimiter.filter.user.methods=/a/b/c/d:1 表示每个用户每秒钟只允许访问1次/a/b/c/d接口 #注意:url支持Apache Ant的样式路径。 #例如:配置为 ratelimiter.filter.user.methods=/a/b/c/d:1,/a/b/c/e:1 可以合并配置成 ratelimiter.filter.uri.methods=/a/b/c/**:1 ratelimiter.filter.user.methods= #用户限流器缓存池初始化大小,默认为100,非必配 ratelimiter.filter.user.initSize=100 #用户限流器缓存池最大容量,默认为10000,非必配 ratelimiter.filter.user.maxSize=10000 #用户限流器缓存池中缓存的限流器过期时间,单位:秒,默认1800s,即某个C端用户的限流器在最后一次写入或访问后经过半小时后会被自动从缓存池清除,非必配 ratelimiter.filter.user.expireDuration=1800 ########################################################## #请求被限流状态码 ratelimiter.filter.block.code=429 #请求被限流提示信息 ratelimiter.filter.block.msg=Too many requests ~~~ **说明:**以上配置中 `ratelimiter.filter.uri.methods` 和 `ratelimiter.filter.user.permitsPerSecond` 支持动态刷新,修改这2个配置后组件会自动更新限流器的配置,无需重启应用。 #### 三、可自定义用户解析器 当前用户级限流默认基于客户端IP实现,用户可以基于C端用户标识解析器接口实现自定义用户标识。 C端用户标识解析器接口定义: ~~~java /** * @author gwqin * @description C端用户标识解析器接口,使用者可以实现该接口自定义用户标识,自定义实现类需要注入到Spring容器中方能生效 * @date 2022-12-29 16:15 */ public interface UserIdentifyResolver { /** * 客户端用户标识解析方法 * @param request HttpServletRequest 请求对象 * @return 客户端用户标识 */ String resolve(HttpServletRequest request); } ~~~ 自定义用户标识示例: ~~~java // 必须加入Spring容器才能生效 @Component public class UserIdResolver implements UserIdentifyResolver { @Override public String resolve(HttpServletRequest request) { // 基于用户id实现 return request.getParameter("userId"); } } ~~~ **注意:**当容器中存在多个UserIdentifyResolver实现类时,将采用默认的方式标识用户,即基于客户端IP定义用户标识。