使用ratelimitj进行api的限流

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

maven

<!-- https://mvnrepository.com/artifact/es.moki.ratelimitj/ratelimitj-core -->
<dependency>
    <groupId>es.moki.ratelimitj</groupId>
    <artifactId>ratelimitj-core</artifactId>
    <version>0.4.0.M1</version>
</dependency>
<dependency>
  <groupId>es.moki.ratelimitj</groupId>
  <artifactId>ratelimitj-inmemory</artifactId>
  <version>0.4.0.M1</version>
</dependency>

使用

@Component
public class RateLimitService {

    Set<RequestLimitRule> 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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,782评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,027评论 19 139
  • 晴天九月总结 关于工作 很满意,在拉齿工段帮工一个星期。学会了拉齿加工操作,以前只知道书上有介绍什么是拉刀,现在实...
    蔡仁华88阅读 180评论 0 0
  • 在学习LTE下行同步信号时产生一个疑问: TDD中PSS位于子帧1和子帧6的第3个符号,SSS位于子帧0和5的最后...
    啊啊啊ying啊阅读 705评论 0 0
  • 1,有些事情,有些心情,憋着难受,但又找不到合适的人说说,或者说了又觉得矫情,所以就在这里写写。2,健忘,有时候会...
    稻子笑阅读 101评论 0 0