播放WSRequest时出现异常-java.lang.IllegalStateException:已关闭
我正在尝试使用Play的WSRequest和WSClient向端点发送请求。它在很长一段时间内运行良好,但在抛出错误java.lang.IllegalStateException:Closed一段时间后崩溃 这是在远程服务器上运行的,并且对不同的URL并行进行多次调用 还有一件事让我担心的是,我没有关闭WSClient对象(文档中已经明确说明应该关闭它)。我试着在睡眠结束后加上这个,但它抛出了一个异常。我假设一旦我们退出该函数,垃圾收集器将导致WSClient释放其资源 简言之,我面临两个问题播放WSRequest时出现异常-java.lang.IllegalStateException:已关闭,java,playframework,ws-client,Java,Playframework,Ws Client,我正在尝试使用Play的WSRequest和WSClient向端点发送请求。它在很长一段时间内运行良好,但在抛出错误java.lang.IllegalStateException:Closed一段时间后崩溃 这是在远程服务器上运行的,并且对不同的URL并行进行多次调用 还有一件事让我担心的是,我没有关闭WSClient对象(文档中已经明确说明应该关闭它)。我试着在睡眠结束后加上这个,但它抛出了一个异常。我假设一旦我们退出该函数,垃圾收集器将导致WSClient释放其资源 简言之,我面临两个问题
public static Integer makeAPICall(String url) {
WSClient cli = WS.client();
WSRequest wsRequest = cli.url(url);
wsRequest.setRequestTimeout(6000);
CompletionStage<WSResponse> responsePromise = wsRequest.get();
CompletionStage<Integer> response = responsePromise.handle((result, error) -> {
if (null != result && result.getStatus() == 200) {
Logger.info("Success: " + result.getStatus());
return 1;
} else if (null != error) {
Logger.error("Error while making the call. error = " + error.toString());
return 0;
} else {
Logger.error("Error while making the api call. result = " + result.getStatus());
return 0;
}
});
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
Logger.error("Error while putting thread to sleep " + e);
e.printStackTrace();
}
/*Trying to close the client - does not work since an exception is thrown
try {
cli.close();
} catch (IOException e) {
e.printStackTrace();
System.out.println("Error when closing the client");
}*/
return response.toCompletableFuture().join();
}
public静态整数makeAPICall(字符串url){
WSClient cli=WS.client();
WSRequest WSRequest=cli.url(url);
wsRequest.setRequestTimeout(6000);
CompletionStage responsePromise=wsRequest.get();
CompletionStage响应=responsePromise.handle((结果、错误)->{
if(null!=result&&result.getStatus()==200){
Logger.info(“成功:+result.getStatus());
返回1;
}else if(null!=错误){
Logger.error(“调用时出错。error=“+error.toString());
返回0;
}否则{
Logger.error(“调用api时出错。结果=“+result.getStatus());
返回0;
}
});
试一试{
睡眠(1000);
}捕捉(中断异常e){
Logger.error(“将线程置于睡眠状态时出错”+e);
e、 printStackTrace();
}
/*尝试关闭客户端-由于引发异常,因此无效
试一试{
cli.close();
}捕获(IOE异常){
e、 printStackTrace();
System.out.println(“关闭客户端时出错”);
}*/
返回response.toCompletableFuture().join();
}