Skip to content

Instantly share code, notes, and snippets.

@adamw
Last active June 6, 2018 10:47
Show Gist options
  • Select an option

  • Save adamw/b25755161035a5a8b45fe1db4023f7e4 to your computer and use it in GitHub Desktop.

Select an option

Save adamw/b25755161035a5a8b45fe1db4023f7e4 to your computer and use it in GitHub Desktop.
class AkkaRateLimiter(rateLimiterActor: ActorRef) {
def runLimited[T](f: => Future[T])(implicit ec: ExecutionContext): Future[T] = {
val p = Promise[T]
val msg = LazyFuture(() => f.andThen { case r => p.complete(r) }.map(_ => ()))
rateLimiterActor ! msg
p.future
}
}
object AkkaRateLimiter {
def create(maxRuns: Int, per: FiniteDuration)(
implicit actorSystem: ActorSystem): AkkaRateLimiter = {
val rateLimiterActor = actorSystem.actorOf(
Props(new RateLimiterActor(maxRuns, per)))
new AkkaRateLimiter(rateLimiterActor)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment