播放WSRequest时出现异常-java.lang.IllegalStateException:已关闭

播放WSRequest时出现异常-java.lang.IllegalStateException:已关闭,java,playframework,ws-client,Java,Playframework,Ws Client,我正在尝试使用Play的WSRequest和WSClient向端点发送请求。它在很长一段时间内运行良好,但在抛出错误java.lang.IllegalStateException:Closed一段时间后崩溃 这是在远程服务器上运行的,并且对不同的URL并行进行多次调用 还有一件事让我担心的是,我没有关闭WSClient对象(文档中已经明确说明应该关闭它)。我试着在睡眠结束后加上这个,但它抛出了一个异常。我假设一旦我们退出该函数,垃圾收集器将导致WSClient释放其资源 简言之,我面临两个问题

我正在尝试使用Play的WSRequest和WSClient向端点发送请求。它在很长一段时间内运行良好,但在抛出错误java.lang.IllegalStateException:Closed一段时间后崩溃

这是在远程服务器上运行的,并且对不同的URL并行进行多次调用

还有一件事让我担心的是,我没有关闭WSClient对象(文档中已经明确说明应该关闭它)。我试着在睡眠结束后加上这个,但它抛出了一个异常。我假设一旦我们退出该函数,垃圾收集器将导致WSClient释放其资源

简言之,我面临两个问题

  • 在类似的情况下,我找不到关于“java.lang.IllegalStateException:Closed”的更多信息
  • 在这种情况下,我不关闭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();
    }