私は酔っぱらいシステムで遊んでいて、Guava RateLimiterを見つけました。私がどのように調整するのかは、過度の要求(.acquire(...)メソッド)をキューイングするか、それらを破棄すること(tryAcquire(...)メソッド)のどちらかであることがわかります。Guava RateLimiter Bursting
前記制限待ち行列に達した後、または要求を破棄した後にのみ、指定された量まで要求を許可するオプションが存在すると考える。例えば
:
public static void main(String[] args)
{
try
{
RateLimiter limiter = RateLimiter.create(5.0);
//fictive call not saying it should be implemented this way
limiter.allowBursts(true);
for(int i = 0; i < 20; i++)
{
Thread.sleep(100);
performOperation(limiter);
}
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
private static void performOperation(RateLimiter limiter)
{
if(limiter.tryAcquire())
{
System.out.println(Instant.now() + ": Beep");
}
}
これは、その後、5回のビープ音をプリントアウトし、次の5を省略し、再度
を5を印刷し、私はこれを考えて一つだけが持っている便利な機能だろうAMまたは私はポイントを逃していますか?
のテストコードの礼儀: Throttling method calls using Guava RateLimiter class
固定サイズのキューを追加したくありません。私はそれが期間Y以内に最初のXの量の要求を受け入れるようにしたいだけです。そして、(既存の機能性に応じて)次のメッセージを省略またはキューに入れます。間隔が一旦Xを受け入れたら、もう一度やり直してください。 希望ですか? – Rhed