bucket4j-spring-boot-starter小试牛刀

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

maven

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

配置

开启缓存

    @Bean
    public CacheManager cacheManager() {
        final CachingProvider cachingProvider = Caching.getCachingProvider();
        return cachingProvider.getCacheManager();
    }

application.yml

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

验证

wrk -t12 -c20 -d10s -T60s  --latency http://localhost:8080/actuator

访问/actuator

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

原文发布于微信公众号 - 码匠的流水账(geek_luandun)

原文发表时间:2018-09-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码匠的流水账

聊聊servicecomb-saga的alpha-server

alpha-server是servicecomb-saga的分布式事务协调中心,采用spring boot开发,可以直接从jar包启动,需要依赖mysql或pg...

2811
来自专栏电光石火

spring 在Thread中注入@Resource失败,总为null的解决方案

@Resource private MyMapper myDao; 但是运行的时候,进入到这个线程,这个myDao总为nul...

7577
来自专栏SpringSpace.cn

在 ubuntu 12.10 中安装 opensips 1.8.2

解压软件包: tar -zxvf opensips-1.8.2_src.tar.gz

2262
来自专栏云原生架构实践

Jhipster技术栈定制 - 基于UAA的微服务之间安全调用

3个微服务都是通过Jhipster生成。 工程代码生成完之后,根据上一节启动的组件的实际情况,修改微服务配置文件中Eureka和database相关的配置。

9973
来自专栏Spring相关

security和oauth2.0的整合

之前已经介绍过security的相关的介绍,现在所需要做的就是security和oauth2.0的整合,在原有的基础上我们加上一些相关的代码;代码实现如下:

1621
来自专栏码匠的流水账

spring security oauth2牛刀小试

3591
来自专栏IT笔记

SpringBoot开发案例之配置Druid数据库连接池

好久没有更新Spring Boot系列文章,你说忙么?也可能是,前段时间的关注点也许在其他方面了,最近项目中需要开发小程序,正好采用Spring Boot实现一...

1.1K10
来自专栏后端云

ansible简单使用

ansible的安装算简单的了,不要配置数据库,不用在远程操作的节点安装任何东西。只需要本机安装ansible即可。

1904
来自专栏芋道源码1024

熔断器 Hystrix 源码解析 —— 断路器 HystrixCircuitBreaker

本文主要基于 Hystrix 1.5.X 版本 1. 概述 2. HystrixCircuitBreaker 3. HystrixCircuitBreaker....

7707
来自专栏码神联盟

框架 | SpringBoot项目发布部署外部tomcat服务器步骤

1.7K2

扫码关注云+社区

领取腾讯云代金券