控制資源每秒被訪問次數的實現

2021-08-18 21:38:12 字數 783 閱讀 7369

在平時做介面開發時,可能遇到需要控制介面訪問頻率的需求,比如某個介面每秒最多允許被訪問100次,我們可以借助併發工具類中的semaphore實現,以下為示例**:

public

class

tpslimiter

this.semaphore = new semaphore(maxops);

executors.newscheduledthreadpool(1).scheduleatfixedrate(() ->

// 每秒釋放給定數目的許可,將其返回到訊號量

semaphore.release(maxops), 1000, 1000, timeunit.milliseconds);

}/**

* 呼叫介面之前先呼叫此方法,當超過最大ops時該方法會阻塞

*/public

void

await()

}

以下為測試**:

public class

tpslimitertest catch (interruptedexception e)

system.out.println(at.get());

}}).start

(); // 啟動100個執行緒對atomicinteger進行累加,為了方便就沒有使用執行緒池

for(int i = 0; i < 100; i++)

}).start

(); }

}}

介面及實現的訪問控制

一般使用介面都預設的public方式,還沒有注意過其他訪問控制方式。重構專案時,遇到使用其他控制符的情況,現總結如下 介面成員屬性,預設是public方式,並且不能顯式使用其他控制符 inte ce本身可以用其他控制符,比如 internal inte ce myclass 在實現時同樣不能使用訪問...

WebApi介面訪問頻率控制的實現

關於限流的文章,內還是有挺多的。本文做了乙個基於filter限流的例子,算是對webapithrottle使用的乙個具體的例項。1 使用nuget,對webapi專案新增webapithrottle的引用 2 進行註冊,一般是在webapiconfig的register方法裡新增,如下 1 conf...

WebApi介面訪問頻率控制的實現

關於限流的文章,內還是有挺多的。本文做了乙個基於filter限流的例子,算是對webapithrottle使用的乙個具體的例項。1 使用nuget,對webapi專案新增webapithrottle的引用 2 進行註冊,一般是在webapiconfig的register方法裡新增,如下 1 conf...