服務限流-令牌桶算法demo


// 因為令牌桶對業務有一定的容忍度
public class TokenBucket {

    private int bucketNums=100;  // 桶的容量
    private int rate=1;          // 流入速度
    private int nowTokens;      //  當前令牌數量
    private long timestamp=getNowTime();     //  時間

    private long getNowTime(){
        return System.currentTimeMillis();
    }

    private int min(int tokens){
        if(bucketNums > tokens){
            return tokens;
        }else{
            return bucketNums;
        }
    }

    public boolean getToken(){
        // 記錄來拿令牌的時間
        long nowTime = getNowTime();
        // 添加令牌【判斷該有多少個令牌】
        nowTokens = nowTokens + (int)((nowTime - timestamp)*rate);
        // 添加以后的令牌數量與桶的容量那個小
        nowTokens = min(nowTokens);
        System.out.println("當前令牌數量"+nowTokens);
        // 修改拿令牌的時間
        timestamp = nowTime;
        // 判斷令牌是否足夠
        if(nowTokens < 1){
           return false;
        }else{
            nowTokens -= 1;
            return true;
        }
    }
}

服務限流是高可用的一種手段

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM