limiter-lock锁limiter-tokenbucket令牌桶模块limiter-open-platform开放平台限流器模块limiter-common公有的类库
- 可以从
appkey,method,appkey+detail对开放平台接口调用进行限制,默认后者的配置会覆盖前者 - 整个项目即可以基于单机进行限流,也可以基于集群实现(默认使用
Redis)
-
配置文件参数说明
capacity:容量,即初始给每个桶(限制)的容量.(appkey的capacity=200表示该appkey可以在一瞬间访问200次)addNum:每addTimeWithMillisecond单位时间内增加的访问次数(addNum=1;addTimeWithMillisecond=2000表示2S增加1次访问次数,访问次数不能超过capacity)addTimeWithMillisecond:每addTimeWithMillisecond单位时间内增加addNum访问次数,单位毫秒addPeriod:增加访问次数的周期,单位毫秒,如果addPeriod不填写或者addPeriod小于addTimeWithMillisecond则默认使用addTimeWithMillisecond(addPeriod=3000表示距离上次次数增加的时间超过3S,才会进行下一轮的访问次数的增加,增加数量规则由addNum和addTimeWithMillisecond决定)
-
LimiterFacade为总入口ParseService,xml解析器,用于解析配置文件RuleDao,规则Dao,返回整个xml配置信息ConfigCenter,令牌桶配置管理中心ConfigLoad,令牌桶配置加载,将xml里面的规则转换成令牌桶的配置信息LockService,锁服务,因为对令牌桶的令牌操作涉及到数据竞争,所以需要加锁(当然如果可以利用CAS的,LockService可以用空实现替换)TokenBucketDao,令牌桶信息的存储TokenFilledStrategy,令牌桶填充个策略,当前策略是如果如果达到令牌桶的容量则停止
-
运行方式
-
在项目
resources文件夹加入配置文件,参考limiter-open-platform.src.test.resources路径下的配置文件 -
在项目中引用
LimiterFacade,外部使用必须保证LimiterFacade是单例的LimiterFacade limiterFacade = new LimiterFacade();limiterFacade.visit("appkey","method");
-
-
maven依赖<repositories> <repository> <id>jitpack.io</id> <url>https://jitpack.io</url> </repository> </repositories> <dependency> <groupId>com.github.iMouseWu.limiter</groupId> <artifactId>limiter-open-platform</artifactId> <version>1.0.1</version> </dependency>