Open
Description
Hi, I find the delay between RequestTimeout and the time corresponding future completes by a timeout exception is quite long. Below is my test.
version:
<dependency>
<groupId>org.asynchttpclient</groupId>
<artifactId>async-http-client</artifactId>
<version>2.10.4</version>
</dependency>
test code:
@RequestMapping("/api/timeout_test")
public BaseApiResponse<Long> timeoutTest() {
long timeout = 1000;
try {
Thread.sleep(timeout);
} catch (InterruptedException e) {
e.printStackTrace();
}
BaseApiResponse<Long> objectBaseApiResponse = new BaseApiResponse<>();
objectBaseApiResponse.setData(timeout);
return objectBaseApiResponse;
}
@RequestMapping("/api/timeout")
public BaseApiResponse<String> timeout() {
DefaultAsyncHttpClientConfig.Builder builder = new DefaultAsyncHttpClientConfig.Builder();
builder.setConnectTimeout(5);
AsyncHttpClient client = asyncHttpClient(builder);
int timeout = 20;
String url = "http://localhost:8080/api/timeout_test";
BaseApiResponse<String> response = new BaseApiResponse<>();
RequestBuilder requestBuilder = new RequestBuilder();
Request request = requestBuilder.setUrl(url).setRequestTimeout(timeout).build();
long beforeFutureCreated = System.currentTimeMillis();
ListenableFuture<Response> responseListenableFuture = client.executeRequest(request);
long futureCreated = System.currentTimeMillis();
responseListenableFuture.addListener(() -> {
long futureComplete = System.currentTimeMillis();
String msg = String.format("future creation: %s, future complete: %s", futureCreated - beforeFutureCreated, futureComplete - beforeFutureCreated);
response.setMessage(msg);
}, Runnable::run);
try {
responseListenableFuture.get();
} catch (Exception e) {
e.printStackTrace();
}
return response;
}
result:
I tried many times, and the future complete time is always much longer than 20ms. It doesn't matter if I use a pre-created AsyncHttpClient or create a new one on each request.
{"code":0,"message":"future creation: 0, future complete: 103","data":null}
{"code":0,"message":"future creation: 0, future complete: 85","data":null}
{"code":0,"message":"future creation: 1, future complete: 87","data":null}
{"code":0,"message":"future creation: 1, future complete: 113","data":null}
log:
java.util.concurrent.TimeoutException: Request timeout to localhost/127.0.0.1:8080 after 20 ms