Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用HttpAsyncClient在java中启动并忘记_Java_Http_Apache Httpclient 4.x - Fatal编程技术网

使用HttpAsyncClient在java中启动并忘记

使用HttpAsyncClient在java中启动并忘记,java,http,apache-httpclient-4.x,Java,Http,Apache Httpclient 4.x,我正在尝试在我的应用程序中使用HTTPAsyncCLient进行fire and forget 我遵循这里给出的示例: 我的代码如下所示: CloseableHttpAsyncClient httpclient = HttpAsyncClients.createDefault(); httpclient.start(); HttpGet request = new HttpGet(url); Future

我正在尝试在我的应用程序中使用HTTPAsyncCLient进行fire and forget

我遵循这里给出的示例:

我的代码如下所示:

           CloseableHttpAsyncClient httpclient = HttpAsyncClients.createDefault();
           httpclient.start();
           HttpGet request = new HttpGet(url);
           Future<HttpResponse> future = httpclient.execute(request, null);
          /*try {
            HttpResponse resp = future.get();
            StringBuilder sb = new StringBuilder();
            BufferedReader reader = new BufferedReader(new InputStreamReader(resp.getEntity().getContent()));
            String line = null;

            while ((line = reader.readLine()) != null) {
                sb.append(line);
            }
            String fr = sb.toString();
          } catch (InterruptedException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
          } catch (ExecutionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }*/
       httpclient.close();
CloseableHttpAsyncClient httpclient=HttpAsyncClients.createDefault();
httpclient.start();
HttpGet请求=新的HttpGet(url);
Future=httpclient.execute(请求,null);
/*试一试{
HttpResponse resp=future.get();
StringBuilder sb=新的StringBuilder();
BufferedReader=new BufferedReader(new InputStreamReader(resp.getEntity().getContent());
字符串行=null;
而((line=reader.readLine())!=null){
某人附加(行);
}
字符串fr=sb.toString();
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(执行例外){
//TODO自动生成的捕捉块
e、 printStackTrace();
}*/
httpclient.close();
如果我取消注释被评论的部分,一切都正常。 但我想做的是一个火和忘记的请求。因此,当我注释掉上面的部分时,不会发出HTTP请求。
知道我做错了什么吗?对于fire and forget请求,我应该怎么做?

在请求完成之前,您的httpclient实例无法关闭

虽然我不确定,但我建议

// ONCE
CloseableHttpAsyncClient httpclient = HttpAsyncClients.createDefault();
httpclient.start();


// for every fire and forget request
HttpGet request = new HttpGet(url);
httpclient.execute(request, null);`

在请求之间保持客户机的活动状态,因此不要调用close(而是重用实例)

因为您不会强制将来处于已注释掉的状态,所以很可能在发送请求之前执行httpclient.close(),更不用说完成请求了。你试过在近距离突破吗?如果被困在这个断点中,你能观察到请求吗?你是对的。如果我在httpclient.close()上中断,则会在服务器上接收请求。所以我理解这个问题。我们如何让它启动并忘记呢?如果不调用
close()
,我就无法重新启动我的tomcat。有什么地方可以调用它吗?