Skip to content

bebopze/rate-limiter-spring-boot-starter

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 

Repository files navigation

读我

功能

集群QPS控制,在方法上添加注解即可限制QPS

使用方法

注解定义

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Limiter {

    /**
     * 限流route
     * @return
     */
    String route();

    /**
     * 限流次数
     * @return
     */
    int limit() default 10;

}

资源

在pom.xml中添加依赖

<dependency>
    <groupId>com.genxiaogu</groupId>
    <artifactId>rate-limiter-spring-boot-starter</artifactId>
    <version>1.1.0</version>
</dependency>

在application.properties中添加redis资源

spring.redis.database=0
spring.redis.host=127.0.0.1
spring.redis.port=8888
spring.redis.password=xxx
spring.redis.pool.max-active=50000
spring.redis.pool.max-wait=-1
spring.redis.pool.max-idle=10
spring.redis.pool.min-idle=0
spring.redis.timeout=500

在需要进行流量控制的方法上添加注解例如

mapping方法上
@Limiter(route = "test", limit = 100)
@RequestMapping("/test")
public String check(){
    return dataPermissionTest.test() ;
}
或者在普通方法上
@Limiter(route = "test", limit = 100)
public String test(){
    return "test" ;
}

注意,Limiter的route参数指代控制方法的唯一key,limit表示1s内允许访问多少次

DEMO

spring-boot-rate-limiter-demo

使用siege测试

总结

我尝试把系统的QPS压测到100

siege -c 50 -t 1 'http://localhost:8080/test'
Transactions:		        1125 hits
Availability:		       98.00 %
Elapsed time:		       11.80 secs
Data transferred:	        0.01 MB
Response time:		        0.00 secs
Transaction rate:	       95.34 trans/sec
Throughput:		        0.00 MB/sec
Concurrency:		        0.41
Successful transactions:        1125
Failed transactions:	          23
Longest transaction:	        0.14
Shortest transaction:	        0.00

TOList

  • 统计每个route的拦截次数以及通过次数
  • 统计被拦截的IP地址信息等,预防DDOS很有用
  • 现在抛异常的方案太过粗暴,可以定义接口由客户端来实现逻辑
  • 针对不同的用户进行不同的流量控制

About

QPS流量控制starter

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 97.3%
  • Lua 2.7%