Apache Http客户端问题

问题描述 投票:0回答:1

我有这部分代码:

         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分钟,直到我从服务器收到请求的答案,这实际上是我试图阻止上面的超时设置。

有没有我在这里错过的东西或者应该在这个设置旁边处理的东西?

java apache-httpclient-4.x
1个回答
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所做的。

© www.soinside.com 2019 - 2024. All rights reserved.