1、计数器固定窗口算法
计数器固定窗口算法是最简单的限流算法,实现方式也比较简单。就是通过维护一个单位时间内的计数值,每当一个请求通过时,就将计数值加 1,当计数值超过预先设定的阈值时,就拒绝单位时间内的其他请求。如果单位时间已经结束,则将计数器清零,开启下一轮的计数。

package com.on.sentinel;
import com.on.sentinel.exception.BlockException;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
public class CounterRateLimit implements RateLimit, Runnable {
/**
* 阈值
*/
private Integer limitCount;
/**
* 当前通过请求数
*/
private AtomicInteger passCount;
/**
* 统计时间间隔
*/
private long period;
private TimeUnit timeUnit;
private ScheduledExecutorService scheduledExecutorService;
public CounterRateLimit(Integer limitCount) {
this(limitCount, 1000, TimeUnit.MILLISECONDS);
}
public CounterRateLimit(Integer limitCount, long period, TimeUnit timeUnit) {
this.limitCount = limitCount;
this.period = period;
this.timeUnit = timeUnit;
passCount = new ();
.startResetTask();
}
BlockException {
(passCount.incrementAndGet() > limitCount) {
();
}
;
}
{
scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
scheduledExecutorService.scheduleAtFixedRate(, , period, timeUnit);
}
{
passCount.set();
}
}






