goralim is a Golang package that provides a rate limiter based on Token bucket algorithm. It is capabale to handle distributed workload with its redis database support. It has HTTP server middleware support (as of now).
๐ง this is a beta version now and under active development. For production use, fork it and made changes based on your need.
go get "github.com/0verread/goralim" -m
import (
goralim "github.com/0verread/goralim"
)
// Redis initialization
config := goralim.RedisConfig {
HOST: "127.0.0.1",
PORT: 6379,
// password
PASS: "",
}
redisStore := goralim.NewRedisClient(config)
// setup rate limiter for a key (key can be userId/client)
// 10 is bucket size, 5 is bucket refill rate per second
tb := goralim.NewTokenBucket("key123", redisStore, 10, 5)
// create HTTP server and setup a goralim middleware to put a rate limiter
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hey There this is a Request")
})
rateLimitedHandler := goralim.RateLimiter(tb, handler)
http.ListenAndServe(":8080", rateLimitedHandler)
Under MIT license