如何使用 Akka 延迟一秒限制 Futures

egu*_*eys 3 scala akka akka-stream akka-http

我有 URI 列表,我想请求每个 URI,中间有 1 秒的延迟。我怎样才能做到这一点?

val uris: List[String] = List()
// How to make these URIs resolve 1 second apart?
val responses: List[Future[Response]] = uris.map(httpRequest(_))
Run Code Online (Sandbox Code Playgroud)

Jef*_*ung 6

您可以Source从 URI 列表创建 Akka Streams ,然后throttle将每个 URI 转换为Future[Response]

def httpRequest(uri: String): Future[Response] = ???

val uris: List[String] = ???

val responses: Future[Seq[Response]] =
  Source(uris)
    .throttle(1, 1 second)
    .mapAsync(parallelism = 1)(httpRequest)
    .runWith(Sink.seq[Response])
Run Code Online (Sandbox Code Playgroud)