// 因為令牌桶對業務有一定的容忍度 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; } } }
服務限流是高可用的一種手段
