API to throttle/rate-limit requests
Java
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
src
.gitignore
.travis.yml
LICENSE
README.md
pom.xml

README.md

Throttling API Build Status

Overview

API to throttle/rate-limit requests

This API implements two popular throttling strategies, namely:

  1. Fixed token bucket
  2. Leaky token bucket

Fixed token bucket

Details for this implementation can be found at: Token Bucket

Leaky token bucket

Details for this implementation can be found at: Leaky Bucket With in the API, Leaky buckets have been implemented as two types

  1. StepDownLeakyTokenBucketStrategy
  2. StepUpLeakyTokenBucketStrategy

StepDownLeakyTokenBucketStrategy resembles a bucket which has been filled with tokens at the beginning but subsequently leaks tokens at a fixed interval. StepUpLeakyTokenBucketStrategy resemembles an empty bucket at the beginning but get filled will tokens over a fixed interval.

Examples

Fixed Bucket Example

// construct strategy
ThrottleStrategy strategy = new FixedTokenBucketStrategy(100, 1, TimeUnit.MINUTES);

// provide the strategy to the throttler
Throttle throttle = new Throttle(strategy);

// throttle :)
boolean isThrottled = throttle.canProceed();

if(!isThrottled){ 
  // your logic
}

Step Up Leaky Bucket Example

// construct strategy
ThrottleStrategy strategy = new StepUpLeakyTokenBucketStrategy(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
}

Step Down Leaky Bucket Example

// construct strategy
ThrottleStrategy strategy = new StepDownLeakyTokenBucketStrategy(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
}

Wait For Token Availability Example

// construct strategy
ThrottleStrategy strategy = new FixedTokenBucketStrategy(100, 1, TimeUnit.MINUTES);

// provide the strategy to the throttler
Throttle throttle = new Throttle(strategy);

while(!throttle.canProceed()){
    Thread.sleep(throttle.waitTime(TimeUnit.MILLISECONDS));
}

// your logic