This commit is contained in:
Looly 2024-08-20 09:13:24 +08:00
parent 77e4600d44
commit 65fd58e690

View File

@ -24,8 +24,16 @@ import java.util.concurrent.*;
/**
* 基于{@link Semaphore} 实现的限流器<br>
* 此算法实现了固定窗口(Fixed Window)计数法即设置固定窗口<br>
* 窗口时间为{@link RateLimiterConfig#getLimitRefreshPeriod()}每次窗口内请求数不超过{@link RateLimiterConfig#getLimitForPeriod()}<br>
* 在窗口期允许的请求数是固定的请求结束后拒绝访问直到下一个窗口开始则重新开始计数<br>
* 参考https://github.com/TFdream/juice/blob/master/juice-ratelimiter/src/main/java/juice/ratelimiter/internal/SemaphoreBasedRateLimiter.java
*
* <ul>
* <li>优点内存占用小实现简单</li>
* <li>缺点不够平滑在窗口期开始时可能请求暴增窗口结束时大量请求丢失突刺现象</li>
* </ul>
*
* @author Ricky Fung
* @since 6.0.0
*/
@ -47,8 +55,8 @@ public class SemaphoreRateLimiter implements RateLimiter {
/**
* 构造
*
* @param config 限流配置
* @param semaphore {@link Semaphore}
* @param config 限流配置
* @param semaphore {@link Semaphore}
*/
public SemaphoreRateLimiter(final RateLimiterConfig config, final Semaphore semaphore) {
this(config, semaphore, null);
@ -57,9 +65,9 @@ public class SemaphoreRateLimiter implements RateLimiter {
/**
* 构造
*
* @param config 限流配置
* @param semaphore {@link Semaphore}
* @param scheduler 定时器
* @param config 限流配置
* @param semaphore {@link Semaphore}
* @param scheduler 定时器
*/
public SemaphoreRateLimiter(final RateLimiterConfig config, final Semaphore semaphore, final ScheduledExecutorService scheduler) {
this.config = Assert.notNull(config);