Scala 通过 akka streaming 读取大量块数据

Scala read large set of chunk data through akka streaming

我正在尝试通过 scala 读取大量数据,如下所述:

import akka.actor.ActorSystem
import akka.http.scaladsl.Http
import akka.http.scaladsl.model.{Uri, HttpRequest}
import akka.stream.ActorMaterializer

object ChunkTestClient extends App {

  implicit val system = ActorSystem("test")
  import system.dispatcher

  implicit val materializer = ActorMaterializer()
  val source = Uri("https://jigsaw.w3.org/HTTP/ChunkedScript")
  val finished = Http().singleRequest(HttpRequest(uri = source)).flatMap { response =>
    response.entity.dataBytes.runForeach { chunk =>
      println(chunk.utf8String)
    }
  }
}

上面的代码片段在大多数情况下都能正常工作。但是如果响应数据很大,或者源不断地流式传输大量数据,那么块响应就不起作用,它既不会抛出任何错误,也只会静静地杀死。这似乎是背压的情况,其中数据生产率大于消费率。有什么方法可以使用 akka http 流处理大量 size\streaming 数据。在上面的代码中可以做什么来处理客户端的背压。

我终于设法在没有 SizeLimit() 的情况下工作了。我也试过 withSizeLimit() 但这对我不起作用。

`

object ChunkTestClient extends App {

  implicit val system = ActorSystem("test")
  import system.dispatcher

  implicit val materializer = ActorMaterializer()
  val source = Uri("https://jigsaw.w3.org/HTTP/ChunkedScript")
  val finished = Http().singleRequest(HttpRequest(uri = source)).flatMap { response =>
    response.entity.withoutSizeLimit().dataBytes.runForeach { chunk =>
      println(chunk.utf8String)
    }
  }
}

`