API to throttle/rate-limit requests
This API implements two popular throttling strategies, namely:
- Fixed token bucket
- Leaky token buckt
Details for this implementation can be found at: Token Bucket
Details for this implementation can be found at: Leaky Bucket With in the API, Leaky buckets have been implemented as two types
- StepDownLeakyTokenBucket
- StepUpLeakyTokenBucket
StepDownLeakyTokenBucket resembles a bucket which has been filled with tokens at the beginning but subsequently leaks tokens at a fixed interval. StepUpLeakyTokenBucket resemembles an empty bucket at the beginning but get filled will tokens over a fixed interval.
// construct strategy
ThrottleStrategy strategy = new FixedTokenBucket(100, 1, TimeUnit.MINUTES);
// provide the strategy to the throttler
Throttle throttle = new Throttle(strategy);
// throttle :)
boolean isThrottled = throttle.canProceed();
if(!isThrottled){
// your logic
}
// construct strategy
ThrottleStrategy strategy = new StepUpLeakyTokenBucket(100, 1, TimeUnit.MINUTES, 25, 15, TimeUnit.SECONDS);
// provide the strategy to the throttler
Throttle throttle = new Throttle(strategy);
// throttle :)
boolean isThrottled = throttle.canProceed();
if(!isThrottled){
// your logic
}
// construct strategy
ThrottleStrategy strategy = new StepDownLeakyTokenBucket(100, 1, TimeUnit.MINUTES, 25, 15, TimeUnit.SECONDS);
// provide the strategy to the throttler
Throttle throttle = new Throttle(strategy);
// throttle :)
boolean isThrottled = throttle.canProceed();
if(!isThrottled){
// your logic
}