使用ratelimitj进行api的限流

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

maven



    es.moki.ratelimitj
    ratelimitj-core
    0.4.0.M1


  es.moki.ratelimitj
  ratelimitj-inmemory
  0.4.0.M1

使用

@Component
public class RateLimitService {

    Set rules = Collections.singleton(RequestLimitRule.of(1, TimeUnit.MINUTES, 50)); // 50 request per minute, per key
    RequestRateLimiter requestRateLimiter = new InMemorySlidingWindowRequestRateLimiter(rules);

    public boolean reached(String key){
        return requestRateLimiter.overLimitWhenIncremented(key);
    }
}

doc

  • ratelimitj-inmemory

你可能感兴趣的:(java)