跳转至

QPS Counter

统计各接口 QPS 计数 使用一个双向循环链表结构

    static AtomicInteger qpsCount = 100; //线程安全
    static volatile long lastSenconds =  System.currentTimeMillis()/1000;

    //1 计数器 
    public static boolean tryAcquire() {

        long current = System.currentTimeMillis()/1000;
        if(current == lastSenconds){

            if (qpsCount-- > 0) {//CAS api
                return true;
            } else {
                //限流
                return false;
            }

        } else{//下一个时间窗口
            lastSenconds = current;
            qpsCount = 100;
            return true;
        }   
    }