playframework 1.4 中的连接超时
Connection timeout in playframework 1.4
当使用 Unirest 库从一个控制器向另一个控制器发出 GET 请求时,我总是连接超时
应用程序在
运行
http://localhost:9000
我在 Slash extends Controller
中的代码是:
String URL = "http://localhost:9000/api/link/HZbeTR";
Logger.info("Requesting API. URL: %s. ObjectRef: %s", URL, objectRef);
HttpResponse<String> apiResponse = Unirest.get(URL).asString();
在日志中我有:
17:40:24,296 INFO ~ Requesting API. URL: http://192.168.2.36:9000/api/link/HZbeTR. ObjectRef: 5g2NqY
17:41:24,527 ERROR ~ Exception while searching for link by ident. Ident: HZbeTR, ObjectRef: 5g2NqY
17:41:24,528 ERROR ~ ObjectRef: 5g2NqY
com.mashape.unirest.http.exceptions.UnirestException: java.net.SocketTimeoutException: Read timed out
at com.mashape.unirest.http.HttpClientHelper.request(HttpClientHelper.java:143)
at com.mashape.unirest.request.BaseRequest.asString(BaseRequest.java:56)
at controllers.Slash.index(Slash.java:39)
at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:524)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:475)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:451)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:446)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:160)
at Invocation.HTTP Request(Play!)
Caused by: java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
com.mashape.unirest.http.HttpClientHelper.request(HttpClientHelper.java:138)
... 8 more
17:41:24,932 DEBUG ~ Try to write on a closed channel[keepAlive:true]: Remote host may have closed the connection
路径 /api/link/{str}
被路由到另一个 class 扩展控制器。
直接向 http://localhost:9000/api/link/HZbeTR
请求时,只需几毫秒,我就会得到响应。
我调试了网络,发现没有像GET http://localhost:9000/api/link/HZbeTR
这样的请求
我也输入了 String URL = "http://yandex.ru"
并且 Unirest 成功地向 Yandex 发出了请求。
在开发模式下,执行池大小为 1,因此您实际上是在阻塞自己。如果增加池大小,则应解决此问题。有关详细信息,请参阅 https://www.playframework.com/documentation/1.4.x/configuration#play.pool 上的文档。
play.pool=2
注意您可能需要明确定义此设置适用的模式。
当使用 Unirest 库从一个控制器向另一个控制器发出 GET 请求时,我总是连接超时
应用程序在
运行http://localhost:9000
我在 Slash extends Controller
中的代码是:
String URL = "http://localhost:9000/api/link/HZbeTR";
Logger.info("Requesting API. URL: %s. ObjectRef: %s", URL, objectRef);
HttpResponse<String> apiResponse = Unirest.get(URL).asString();
在日志中我有:
17:40:24,296 INFO ~ Requesting API. URL: http://192.168.2.36:9000/api/link/HZbeTR. ObjectRef: 5g2NqY
17:41:24,527 ERROR ~ Exception while searching for link by ident. Ident: HZbeTR, ObjectRef: 5g2NqY
17:41:24,528 ERROR ~ ObjectRef: 5g2NqY
com.mashape.unirest.http.exceptions.UnirestException: java.net.SocketTimeoutException: Read timed out
at com.mashape.unirest.http.HttpClientHelper.request(HttpClientHelper.java:143)
at com.mashape.unirest.request.BaseRequest.asString(BaseRequest.java:56)
at controllers.Slash.index(Slash.java:39)
at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:524)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:475)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:451)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:446)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:160)
at Invocation.HTTP Request(Play!)
Caused by: java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
com.mashape.unirest.http.HttpClientHelper.request(HttpClientHelper.java:138)
... 8 more
17:41:24,932 DEBUG ~ Try to write on a closed channel[keepAlive:true]: Remote host may have closed the connection
路径 /api/link/{str}
被路由到另一个 class 扩展控制器。
直接向 http://localhost:9000/api/link/HZbeTR
请求时,只需几毫秒,我就会得到响应。
我调试了网络,发现没有像GET http://localhost:9000/api/link/HZbeTR
我也输入了 String URL = "http://yandex.ru"
并且 Unirest 成功地向 Yandex 发出了请求。
在开发模式下,执行池大小为 1,因此您实际上是在阻塞自己。如果增加池大小,则应解决此问题。有关详细信息,请参阅 https://www.playframework.com/documentation/1.4.x/configuration#play.pool 上的文档。
play.pool=2
注意您可能需要明确定义此设置适用的模式。