【发布时间】:2019-03-31 16:36:15
【问题描述】:
我的 Java 代码使用共享的 Apache HttpClient 4.4.1。我将单个 POST 请求级别的连接超时、套接字超时和连接请求超时设置为 100 毫秒。它在大多数情况下都能正常工作。但是,在大量请求(压力测试)时,HttpClient 会忽略这些超时;请求可能需要 20 秒或更长时间。 这是我的代码:
private HttpResponse execHttp(HttpRequestBase request, HttpClient client) {
RequestConfig params = RequestConfig.custom()
.setConnectTimeout(100)
.setSocketTimeout(100)
.setConnectionRequestTimeout(100)
.build();
// Set config
request.setConfig(params);
// Measure time
long tStart = System.currentTimeMillis();
// Execute Http request
HttpResponse response = client.execute(request);
// Calculate and print time
long tDiff = System.currentTimeMillis() - tStart;
logger.debug(String.format("HTTPCLIENT EXEC TIME: FROM REQUEST %d / %d / %d MS ACTUAL %d MS",
request.getConfig().getSocketTimeout(),
request.getConfig().getConnectTimeout(),
request.getConfig().getConnectionRequestTimeout(),
tDiff));
return response;
}
在某些情况下,我会得到这样的日志记录:
2018-10-26 14:18:45,496 [my-thread-1] 调试 com.mypackage.HttpTimeoutTest - HTTPCLIENT 执行时间:来自请求 100 / 100 / 100 MS 实际 20044 MS
代码中是否缺少任何内容?或者是否有任何解决方法如何使其始终应用超时?
【问题讨论】:
-
您的代码显示您配置“httpRequestBase”,但执行“请求”。
-
抱歉@DaneWhite 在清理我的代码时错过了这个。已更新。
标签: java timeout apache-httpclient-4.x