查看: 1518|回复: 0

[Java语言] 使用ratelimitj进行api的限流

发表于 2017-8-9 08:00:01
句号论坛

对外发布的api非常有必要进行流控,防止恶意攻击,从而尽可能地保护系统。ratelimitj是一个非常好的开源项目,提供了基于redis、hazelcast、inmemory版本的实现方案。这里简单演示一下如何使用inmemory版本。

maven
  1. <!-- https://mvnrepository.com/artifact/es.moki.ratelimitj/ratelimitj-core -->
  2. <dependency>
  3. <groupId>es.moki.ratelimitj</groupId>
  4. <artifactId>ratelimitj-core</artifactId>
  5. <version>0.4.0.M1</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>es.moki.ratelimitj</groupId>
  9. <artifactId>ratelimitj-inmemory</artifactId>
  10. <version>0.4.0.M1</version>
  11. </dependency>
复制代码
使用
  1. @Component
  2. public class RateLimitService {
  3. Set<RequestLimitRule> rules = Collections.singleton(RequestLimitRule.of(1, TimeUnit.MINUTES, 50)); // 50 request per minute, per key
  4. RequestRateLimiter requestRateLimiter = new InMemorySlidingWindowRequestRateLimiter(rules);
  5. public boolean reached(String key){
  6. return requestRateLimiter.overLimitWhenIncremented(key);
  7. }
  8. }
复制代码
doc ratelimitj-inmemory


太阳http代理AD
回复

使用道具 举报

关闭

站长推荐上一条 /1 下一条