Skip to content

Commit 2ac3fc1

Browse files
tomas-sexenianBeta Bot
authored andcommitted
Cherry pick branch 'genexuslabs:one-ip-timeout' into beta
1 parent 8f4346d commit 2ac3fc1

File tree

1 file changed

+42
-14
lines changed

1 file changed

+42
-14
lines changed

java/src/main/java/com/genexus/internet/HttpClientJavaLib.java

Lines changed: 42 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.apache.http.*;
1919
import org.apache.http.HttpResponse;
2020
import org.apache.http.client.config.CookieSpecs;
21+
import org.apache.http.conn.DnsResolver;
2122
import org.apache.http.conn.routing.HttpRoute;
2223
import org.apache.http.conn.ssl.NoopHostnameVerifier;
2324
import org.apache.http.entity.ContentType;
@@ -65,23 +66,44 @@
6566

6667
public class HttpClientJavaLib extends GXHttpClient {
6768

68-
public HttpClientJavaLib() {
69-
getPoolInstance();
70-
ConnectionKeepAliveStrategy myStrategy = generateKeepAliveStrategy();
71-
httpClientBuilder = HttpClients.custom().setConnectionManager(connManager).setConnectionManagerShared(true).setKeepAliveStrategy(myStrategy);
72-
String gxDns = System.getProperty("GX_USE_FIRST_IP_DNS");
69+
private static class FirstIpDnsResolver implements DnsResolver {
70+
private final DnsResolver defaultDnsResolver = new SystemDefaultDnsResolver();
71+
72+
@Override
73+
public InetAddress[] resolve(final String host) throws UnknownHostException {
74+
InetAddress[] allIps = defaultDnsResolver.resolve(host);
75+
if (allIps != null && allIps.length > 0) {
76+
return new InetAddress[]{allIps[0]};
77+
}
78+
return allIps;
79+
}
80+
}
81+
82+
private static String getGxIpResolverConfig() {
83+
String name = "GX_USE_FIRST_IP_DNS";
84+
String gxDns = System.getProperty(name);
7385
if (gxDns == null || gxDns.trim().isEmpty()) {
74-
gxDns = System.getenv("GX_USE_FIRST_IP_DNS");
86+
gxDns = System.getenv(name);
7587
}
7688
if (gxDns != null && gxDns.trim().equalsIgnoreCase("true")) {
77-
httpClientBuilder.setDnsResolver(new SystemDefaultDnsResolver() {
78-
@Override
79-
public InetAddress[] resolve(String host) throws UnknownHostException {
80-
InetAddress[] all = super.resolve(host);
81-
return new InetAddress[] { all[0] };
82-
}
83-
});
89+
return gxDns.trim();
90+
} else {
91+
return null;
8492
}
93+
}
94+
95+
96+
public HttpClientJavaLib() {
97+
getPoolInstance();
98+
ConnectionKeepAliveStrategy myStrategy = generateKeepAliveStrategy();
99+
HttpClientBuilder builder = HttpClients.custom()
100+
.setConnectionManager(connManager)
101+
.setConnectionManagerShared(true)
102+
.setKeepAliveStrategy(myStrategy);
103+
if (getGxIpResolverConfig() != null) {
104+
builder.setDnsResolver(new FirstIpDnsResolver());
105+
}
106+
httpClientBuilder = builder;
85107
cookies = new BasicCookieStore();
86108
streamsToClose = new Vector<>();
87109
}
@@ -92,7 +114,13 @@ private static void getPoolInstance() {
92114
RegistryBuilder.<ConnectionSocketFactory>create()
93115
.register("http", PlainConnectionSocketFactory.INSTANCE).register("https",getSSLSecureInstance())
94116
.build();
95-
connManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
117+
String useFirstIpDnsResolver = getGxIpResolverConfig();
118+
if (useFirstIpDnsResolver != null) {
119+
DnsResolver dnsResolver = new FirstIpDnsResolver();
120+
connManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry, dnsResolver);
121+
} else {
122+
connManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
123+
}
96124
connManager.setMaxTotal((int) CommonUtil.val(clientCfg.getProperty("Client", "HTTPCLIENT_MAX_SIZE", "1000")));
97125
connManager.setDefaultMaxPerRoute((int) CommonUtil.val(clientCfg.getProperty("Client", "HTTPCLIENT_MAX_PER_ROUTE", "1000")));
98126

0 commit comments

Comments
 (0)