Polishing JettyClientHttpRequestFactory

This commit is contained in:
Arjen Poutsma 2023-06-28 16:19:13 +02:00
parent 2eb8efe83b
commit d1d79babe7
2 changed files with 19 additions and 14 deletions

View File

@ -19,7 +19,6 @@ package org.springframework.http.client;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import java.net.URI; import java.net.URI;
import java.time.Duration;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeoutException;
@ -46,12 +45,12 @@ class JettyClientHttpRequest extends AbstractStreamingClientHttpRequest {
private final Request request; private final Request request;
private final Duration timeOut; private final int readTimeout;
public JettyClientHttpRequest(Request request, Duration timeOut) { public JettyClientHttpRequest(Request request, int readTimeout) {
this.request = request; this.request = request;
this.timeOut = timeOut; this.readTimeout = readTimeout;
} }
@Override @Override
@ -92,7 +91,7 @@ class JettyClientHttpRequest extends AbstractStreamingClientHttpRequest {
else { else {
this.request.send(responseListener); this.request.send(responseListener);
} }
Response response = responseListener.get(TimeUnit.MILLISECONDS.convert(this.timeOut), TimeUnit.MILLISECONDS); Response response = responseListener.get(this.readTimeout, TimeUnit.MILLISECONDS);
return new JettyClientHttpResponse(response, responseListener.getInputStream()); return new JettyClientHttpResponse(response, responseListener.getInputStream());
} }
catch (InterruptedException ex) { catch (InterruptedException ex) {

View File

@ -18,7 +18,6 @@ package org.springframework.http.client;
import java.io.IOException; import java.io.IOException;
import java.net.URI; import java.net.URI;
import java.time.Duration;
import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.client.HttpClient;
import org.eclipse.jetty.client.api.Request; import org.eclipse.jetty.client.api.Request;
@ -41,7 +40,7 @@ public class JettyClientHttpRequestFactory implements ClientHttpRequestFactory,
private final boolean defaultClient; private final boolean defaultClient;
private Duration timeOut = Duration.ofSeconds(1); private int readTimeout = 1000;
/** /**
@ -66,13 +65,20 @@ public class JettyClientHttpRequestFactory implements ClientHttpRequestFactory,
/** /**
* Sets the maximum time to wait until all headers have been received. * Set the underlying connect timeout in milliseconds.
* The default value is 1 second. * A value of 0 specifies an infinite timeout.
*/ */
public void setTimeOut(Duration timeOut) { public void setConnectTimeout(int connectTimeout) {
Assert.notNull(timeOut, "TimeOut must not be null"); Assert.isTrue(connectTimeout >= 0, "Timeout must be a non-negative value");
Assert.isTrue(!timeOut.isNegative(), "TimeOut must not be negative"); this.httpClient.setConnectTimeout(connectTimeout);
this.timeOut = timeOut; }
/**
* Set the underlying read timeout in milliseconds.
*/
public void setReadTimeout(int readTimeout) {
Assert.isTrue(readTimeout > 0, "Timeout must be a positive value");
this.readTimeout = readTimeout;
} }
@Override @Override
@ -105,6 +111,6 @@ public class JettyClientHttpRequestFactory implements ClientHttpRequestFactory,
} }
Request request = this.httpClient.newRequest(uri).method(httpMethod.name()); Request request = this.httpClient.newRequest(uri).method(httpMethod.name());
return new JettyClientHttpRequest(request, this.timeOut); return new JettyClientHttpRequest(request, this.readTimeout);
} }
} }