Scala通过Akka流读取大量的块数据

时间:2020-06-17 18:20:46

标签: scala akka akka-stream akka-http

我正尝试通过Scala读取大块数据,如此处所述:Scala read continuous http stream

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流处理大型数据流。上面的代码中可以做些什么来处理客户端的反压力。

1 个答案:

答案 0 :(得分:0)

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

`

 result = df.groupby('Handle', sort=False).apply(myReformat).reset_index(drop=True)

`