我在CentOS 6上使用Play Framework 2.4并且我的应用程序抛出了这个异常:
java.net.SocketException: Too many open files
我已经在Stack Overflow上搜索了很多主题并尝试了解决方案:
错误不断发生。在其他网站上,我发现人们面临同样的问题,因为他们没有从WSClient调用close()方法,但在我的情况下,我正在使用依赖注入:
@Singleton
class RabbitService @Inject()(ws:WSClient) {
def myFunction() {
ws.url(“url”).withHeaders(
"Content-type" -> "application/json",
"Authorization" -> ("Bearer " + authorization))
.post(message)
.map(r => {
r.status match {
case 201 => Logger.debug("It Rocks")
case _ => Logger.error(s"It sucks")
}
})
}
}
如果我改变我的实现以等待结果,它的工作就像一个魅力,但性能非常差 - 我想使用map函数而不是等待结果:
@Singleton
class RabbitService @Inject()(ws:WSClient) {
def myFunction() {
val response = ws.url("url")
.withHeaders(
"Content-type" -> "application/json",
"Authorization" -> ("Bearer " + authorization))
.post(message)
Try(Await.result(response, 1 seconds)) match {
case Success(r) =>
if(r.status == 201) {
Logger.debug(s"It rocks")
} else {
Logger.error(s"It sucks")
}
case Failure(e) => Logger.error(e.getMessage, e)
}
}
}
任何人都知道如何解决此错误?我尝试了一切但没有成功。
答案 0 :(得分:0)
如果有人遇到同样的问题,你需要在application.conf上配置WSClient - 需要设置macConnectionsTotal和maxConnectionsPerHost。
这就是我解决这个问题的方法。