Throttle

object Throttle

Transform a service to reject any calls the go over a given rate.

class Object
trait Matchable
class Any

Type members

Classlikes

sealed abstract class TokenAvailability extends Product with Serializable
case object TokenAvailable extends TokenAvailability
Companion:
class
trait TokenBucket[F[_]]

A token bucket for use with the Throttle middleware. Consumers can take tokens which will be refilled over time. Implementations are required to provide their own refill mechanism.

A token bucket for use with the Throttle middleware. Consumers can take tokens which will be refilled over time. Implementations are required to provide their own refill mechanism.

Possible implementations include a remote TokenBucket service to coordinate between different application instances.

Companion:
object
final case class TokenUnavailable(retryAfter: Option[FiniteDuration]) extends TokenAvailability

Value members

Concrete methods

def apply[F[_], G[_]](amount: Int, per: FiniteDuration)(http: Http[F, G])(implicit F: Temporal[F]): F[Http[F, G]]

Limits the supplied service to a given rate of calls using an in-memory TokenBucket

Limits the supplied service to a given rate of calls using an in-memory TokenBucket

Value parameters:
amount

the number of calls to the service to permit within the given time period.

http

the service to transform.

per

the time period over which a given number of calls is permitted.

Returns:

a task containing the transformed service.

def apply[F[_], G[_]](bucket: TokenBucket[F], throttleResponse: Option[FiniteDuration] => Response[G])(http: Http[F, G])(implicit F: Monad[F]): Http[F, G]

Limits the supplied service using a provided TokenBucket

Limits the supplied service using a provided TokenBucket

Value parameters:
bucket

a TokenBucket to use to track the rate of incoming requests.

http

the service to transform.

throttleResponse

a function that defines the response when throttled, may be supplied a suggested retry time depending on bucket implementation.

Returns:

a task containing the transformed service.

def httpAapp[F[_]](amount: Int, per: FiniteDuration)(httpApp: HttpApp[F])(implicit F: Temporal[F]): F[HttpApp[F]]

As [apply(amount,per)], but for HttpApp[F]

As [apply(amount,per)], but for HttpApp[F]

def httpApp[F[_] : Monad](bucket: TokenBucket[F], throttleResponse: Option[FiniteDuration] => Response[F])(httpApp: HttpApp[F]): HttpApp[F]

As [apply(bucket,throttleResponse)], but for HttpApp[F]

As [apply(bucket,throttleResponse)], but for HttpApp[F]

def httpRoutes[F[_]](amount: Int, per: FiniteDuration)(httpRoutes: HttpRoutes[F])(implicit F: Temporal[F]): F[HttpRoutes[F]]

As [apply(amount,per)], but for HttpRoutes[F]

As [apply(amount,per)], but for HttpRoutes[F]

def httpRoutes[F[_] : Monad](bucket: TokenBucket[F], throttleResponse: Option[FiniteDuration] => Response[F])(httpRoutes: HttpRoutes[F]): HttpRoutes[F]

As [apply(bucket,throttleResponse)], but for HttpRoutes[F]

As [apply(bucket,throttleResponse)], but for HttpRoutes[F]