创建SpringBoot项目,引入依赖
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
创建一个Controller
@Controller
public class RateController {
//每一秒只能允许二个请求通过
RateLimiter rateLimiter = RateLimiter.create(2.0);
//非阻塞式限流,拿到令牌通过,没有拿到令牌直接返回失败状态
@GetMapping("/tryAcquire")
public String tryAcquire() {
if(rateLimiter.tryAcquire()) {
return "success";
}else {
return "fail";
}
}
//限定时间的非阻塞式限流
@GetMapping("/tryAcquireWithTimeout")
public String tryAcquireWithTimeout() {
//在等待1秒钟还没有获取到令牌就失败
if(rateLimiter.tryAcquire(1,1, TimeUnit.SECONDS)) {
return "success";
}else {
return "fail";
}
}
//同步阻塞式限流,在没有令牌的时候就等待,不会直接返回,直到拿到令牌为止
@GetMapping("/acquire")
public String acquire() {
rateLimiter.acquire();
return "success";
}
}
但是Guava只适用于单机版本的