前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >bucket4j-spring-boot-starter小试牛刀

bucket4j-spring-boot-starter小试牛刀

作者头像
code4it
发布2018-09-17 17:23:25
1.3K0
发布2018-09-17 17:23:25
举报
文章被收录于专栏:码匠的流水账码匠的流水账

本文主要研究一下如何使用bucket4j-spring-boot-starter进行限流

maven

代码语言:javascript
复制
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>
        <dependency>
            <groupId>com.github.ben-manes.caffeine</groupId>
            <artifactId>caffeine</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.cache</groupId>
            <artifactId>cache-api</artifactId>
            <version>1.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.github.ben-manes.caffeine</groupId>
            <artifactId>jcache</artifactId>
            <version>2.6.2</version>
        </dependency>
        <dependency>
            <groupId>com.giffing.bucket4j.spring.boot.starter</groupId>
            <artifactId>bucket4j-spring-boot-starter</artifactId>
            <version>0.1.3</version>
        </dependency>
        <dependency>
            <groupId>com.github.vladimir-bukhtoyarov</groupId>
            <artifactId>bucket4j-core</artifactId>
            <version>4.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.github.vladimir-bukhtoyarov</groupId>
            <artifactId>bucket4j-jcache</artifactId>
            <version>4.0.0</version>
        </dependency>

配置

开启缓存

代码语言:javascript
复制
    @Bean
    public CacheManager cacheManager() {
        final CachingProvider cachingProvider = Caching.getCachingProvider();
        return cachingProvider.getCacheManager();
    }

application.yml

代码语言:javascript
复制
management:
  endpoints:
    web:
      exposure:
        include: "*"
spring:
  cache:
    cache-names:
    - buckets
    caffeine:
      spec: maximumSize=1000000,expireAfterAccess=3600s
bucket4j:
  enabled: true
  filters:
  - cache-name: buckets
    filter-method: servlet
    url: /*
    rate-limits:
    - bandwidths:
      - capacity: 5
        time: 1
        unit: seconds
  • 这里设置了名为buckets的缓存,过期时间为1h,容量为1000000
  • 设置的rate-limits每10秒5个token

验证

代码语言:javascript
复制
wrk -t12 -c20 -d10s -T60s  --latency http://localhost:8080/actuator

访问/actuator

代码语言:javascript
复制
curl -i http://localhost:8080/actuator
HTTP/1.1 429
X-Rate-Limit-Retry-After-Seconds: 0
Content-Type: application/json;charset=ISO-8859-1
Content-Length: 35
Date: Sun, 02 Sep 2018 08:03:51 GMT

{ "message": "Too many requests!" }

小结

bucket4j-spring-boot-starter使用bucket4j进行限流,适配了springboot1、springboot2以及zuul,通过配置文件配置即可轻松实现限流。

doc

  • bucket4j-spring-boot-starter
  • bucket4j-spring-boot-starter-examples
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-09-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码匠的流水账 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • maven
  • 配置
    • 开启缓存
      • application.yml
      • 验证
      • 小结
      • doc
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档