我有这部分代码:
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分钟,直到我从服务器收到请求的答案,这实际上是我试图阻止上面的超时设置。
有没有我在这里错过的东西或者应该在这个设置旁边处理的东西?
如果预期的行为是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
所做的。