HTTP-запрос Akka StreamTcpException - PullRequest
0 голосов
/ 09 июля 2020

Я изучаю библиотеку Akka, я установил локальный сервер в своей системе, используя платформу Play, и я пишу клиентское приложение, используя библиотеку Akka.

implicit val system = ActorSystem("testing")
implicit val materializer = ActorMaterializer()
import system.dispatcher

  val serverHttpRequests = files.map { file =>
    (
    HttpRequest (
      HttpMethods.POST,
      uri = Uri(Url),
      entity = HttpEntity(
        ContentTypes.`text/plain(UTF-8)`,
        getChartData(file)                  // reading file from local file system
      )
    ), file.getName
   )
  }

  val res = Source(serverHttpRequests)
    .via(Http().cachedHostConnectionPool[String]("localhost", 9001))
    .runForeach {
      case (Success(response), fileName) => logger.info(s"$fileName, $response")
        response.discardEntityBytes()
      case (Failure(ex), fileName) => logger.info(s"$fileName failed with $ex")
    }

есть несколько файлов, которые требуется более 1 минуты, чтобы получить ответ от локального сервера, и я получаю следующее исключение для этих файлов fileName failed with akka.stream.StreamTcpException: The connection closed with error: An existing connection was forcibly closed by the remote host

Я попытался увеличить время ожидания до 300 секунд как для клиента, так и для сервера. client application.conf

akka.http.client.idle-timeout = 300s
akka.http.client.connecting-timeout = 300s

server application.conf

akka.http.host-connection-pool.idle-timeout = 300s
akka.http.host-connection-pool.client.idle-timeout = 300s
play.server.akka.https.idleTimeout = 300s
play.server.akka.requestTimeout = 300s
play.server.akka.terminationTimeout = 300s
akka.http.server.bind-timeout = 300s

для приведенного выше кода я пытаюсь обработать 10 файлов, каждый размером меньше 20 KB, и ответ сервера будет в среднем меньше 120 KB для каждого файла. Я также читал, что Akka IO.selectors будет поддерживать соединения, посылая сердцебиение, Я пытаюсь понять точную причину этого исключения и обработать его.

1 Ответ

0 голосов
/ 09 июля 2020

Если вы посмотрите в akka.stream.impl.io.TcpStages, вы увидите, что исключение StreamTcpException(s"The connection closed with error: $cause") генерируется, когда соединение закрывается из-за ошибки ввода-вывода.

Может быть, вы можете попробовать увеличить akka.http.host-connection-pool.max-connections

...