Scala Akka http请求StreamTcpException
我正在学习Akka库,我已经使用Play framework在我的系统中设置了一个本地服务器,我正在 使用Akka库编写客户端应用程序Scala Akka http请求StreamTcpException,scala,playframework,akka,akka-http,connection-timeout,Scala,Playframework,Akka,Akka Http,Connection Timeout,我正在学习Akka库,我已经使用Play framework在我的系统中设置了一个本地服务器,我正在 使用Akka库编写客户端应用程序 implicit val system = ActorSystem("testing") implicit val materializer = ActorMaterializer() import system.dispatcher val serverHttpRequests = files.map { file =>
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分钟以上,
对于这些文件,我得到以下例外情况文件名与akka.stream.StreamTcpException一起失败:连接已关闭,但出现错误:远程主机已强制关闭现有连接
我尝试将客户端和服务器的超时时间增加到300秒。客户端
application.conf
akka.http.client.idle-timeout = 300s
akka.http.client.connecting-timeout = 300s
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
服务器application.conf
akka.http.client.idle-timeout = 300s
akka.http.client.connecting-timeout = 300s
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个文件,每个文件的大小小于20KB,并返回响应
从服务器,每个文件的平均大小将小于120 KB
。
我还读到AkkaIO.selectors
将通过发送心跳来保持连接的活力,我正在试图理解此异常的确切原因并处理它。如果您查看
akka.stream.impl.io.TcpStages
您将看到StreamTcpException(s“connection closed with error:$cause”)
异常在由于io错误而关闭连接时被抛出
如果查看
akka.stream.impl.io.TcpStages
中的akka.http.host connection pool.max connections
,您可能会看到当由于io错误关闭连接时,会抛出StreamTcpException(s“连接关闭时出错:$cause”)
异常
也许您可以尝试将
akka.http.host connection pool.max connections
增加,我尝试将akka.http.host connection pool.max connections
从默认值4增加到6、8和12,但仍然出现异常shlrmm,您考虑过尝试卷曲端点吗?我尝试过将akka.http.host connection pool.max connections
从默认值4增加到6、8和12,但仍然出现异常shlrmm,您考虑过尝试卷曲端点吗?