Scala чтение большого набора данных чанка через потоковую передачу akka - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь прочитать большой кусок данных через scala, как описано здесь: Scala чтение непрерывного потока http

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 streaming. Что можно сделать в приведенном выше коде, чтобы справиться с обратным давлением на стороне клиента.

1 Ответ

0 голосов
/ 29 июня 2020

Наконец-то мне удалось поработать без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)
    }
  }
}

`

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...