Apache Http客户端问题

时间:2017-09-27 08:14:05

标签: java apache-httpclient-4.x

我有这部分代码:

         RequestConfig requestConfig = RequestConfig.custom()
                        .setConnectTimeout(30 * 1000)
                        .setSocketTimeout(30 * 1000)
                        .setConnectionRequestTimeout(30 * 1000)
                        .build();

         BotSynch.httpClient = HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).build();

         httpClient.execute(post);

BotSynch.HttpClient是一个类字段

private static CloseableHttpClient httpClient;

最后一行的帖子是HttpPost。

到目前为止,我的实现效果很好,但是如果我连接的服务器在30秒内没有回复帖子请求,则不会发生任何事情。

有时可能需要长达10分钟,直到我收到服务器对请求的回答,这实际上是我尝试使用上述超时设置阻止的。

我在这里错过了什么,或者在这个设置旁边应该处理什么?

1 个答案:

答案 0 :(得分:1)

如果预期的行为是HttpClient#execute调用永远不会超过30秒,无论执行结果如何,您应该考虑在后台线程方法中使用HttpUriRequest#abort方法,该方法可以中止在指定的间隔后请求。

    final HttpGet request = new HttpGet();
    ScheduledExecutorService executorService = ...
    executorService.schedule(request::abort, (long)30, TimeUnit.SECONDS);
    HttpResponse response = httpClient.execute(request);

我们(包括我自己)永远不要忘记这不是socketTimeout所做的。