Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 20 additions & 1 deletion src/main/java/Diadoc/Api/ConnectionSettings.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,22 @@ public class ConnectionSettings {

private int maxTotalConnections;
private int maxConnectionsPerRoute;
private int connectionRequestTimeout;
private int connectTimeout;
private int socketTimeout;
Copy link
Contributor

@korvalanni korvalanni Dec 22, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

можно сделать поля final, а новые опциональными для обратной совместимости


public ConnectionSettings(int maxTotalConnections, int maxConnectionsPerRoute) {
public ConnectionSettings(int maxTotalConnections, int maxConnectionsPerRoute,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ломается обратная совместимость, лучше добавить конструктор рядом

int connectionRequestTimeout, int connectTimeout, int socketTimeout) {
var maxConnections = 10;
if(maxTotalConnections > maxConnections || maxConnectionsPerRoute > maxConnections){
throw new IllegalArgumentException("Max connections can't be more " + maxConnections);
}

this.maxTotalConnections = maxTotalConnections;
this.maxConnectionsPerRoute = maxConnectionsPerRoute;
this.connectionRequestTimeout = connectionRequestTimeout;
this.connectTimeout = connectTimeout;
this.socketTimeout = socketTimeout;
}

public int getMaxTotalConnections() {
Expand All @@ -22,4 +29,16 @@ public int getMaxTotalConnections() {
public int getMaxConnectionsPerRoute() {
return maxConnectionsPerRoute;
}

public int getConnectionRequestTimeout() {
return connectionRequestTimeout;
}

public int getConnectTimeout() {
return connectTimeout;
}

public int getSocketTimeout() {
return socketTimeout;
}
}
21 changes: 20 additions & 1 deletion src/main/java/Diadoc/Api/httpClient/DiadocHttpClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.config.SocketConfig;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
Expand All @@ -40,6 +41,7 @@ public class DiadocHttpClient {

private CloseableHttpClient httpClient;
private String baseUrl;
private ConnectionSettings connectionSettings;

public DiadocHttpClient(
CredentialsProvider credentialsProvider,
Expand All @@ -56,6 +58,10 @@ public DiadocHttpClient(
if(connectionSettings != null) {
connectionManager.setMaxTotal(connectionSettings.getMaxTotalConnections());
connectionManager.setDefaultMaxPerRoute(connectionSettings.getMaxConnectionsPerRoute());
// https://issues.apache.org/jira/browse/HTTPCLIENT-1478
if (connectionSettings.getConnectTimeout() > 0) {
connectionManager.setDefaultSocketConfig(SocketConfig.custom().setSoTimeout(connectionSettings.getConnectTimeout()).build());
}
}
var httpClientBuilder = HttpClients
.custom()
Expand All @@ -72,6 +78,7 @@ public DiadocHttpClient(

httpClient = httpClientBuilder.build();
this.baseUrl = baseUrl;
this.connectionSettings = connectionSettings;
}

public String getBaseUrl() {
Expand Down Expand Up @@ -146,7 +153,19 @@ private DiadocResponseInfo getRawResponse(HttpResponse response) throws IOExcept
}

private HttpUriRequest createRequest(RequestBuilder requestBuilder) {
var requestConfig = RequestConfig.custom().setAuthenticationEnabled(false).build();
var requestConfigBuilder = RequestConfig.custom();
if (connectionSettings != null) {
if (connectionSettings.getSocketTimeout() > 0) {
requestConfigBuilder.setSocketTimeout(connectionSettings.getSocketTimeout());
}
if (connectionSettings.getConnectTimeout() > 0) {
requestConfigBuilder.setConnectTimeout(connectionSettings.getConnectTimeout());
}
if (connectionSettings.getConnectionRequestTimeout() > 0) {
requestConfigBuilder.setConnectionRequestTimeout(connectionSettings.getConnectionRequestTimeout());
}
}
var requestConfig = requestConfigBuilder.setAuthenticationEnabled(false).build();
return requestBuilder.setConfig(requestConfig).build();
}

Expand Down