Add socketKeepAlive configuration property for Elasticsearch
See gh-32051
This commit is contained in:
parent
f58012395c
commit
122d40a110
|
|
@ -62,6 +62,11 @@ public class ElasticsearchProperties {
|
||||||
*/
|
*/
|
||||||
private String pathPrefix;
|
private String pathPrefix;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether to enable socket keep alive between client and Elasticsearch.
|
||||||
|
*/
|
||||||
|
private boolean socketKeepAlive = false;
|
||||||
|
|
||||||
private final Restclient restclient = new Restclient();
|
private final Restclient restclient = new Restclient();
|
||||||
|
|
||||||
public List<String> getUris() {
|
public List<String> getUris() {
|
||||||
|
|
@ -112,6 +117,14 @@ public class ElasticsearchProperties {
|
||||||
this.pathPrefix = pathPrefix;
|
this.pathPrefix = pathPrefix;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isSocketKeepAlive() {
|
||||||
|
return this.socketKeepAlive;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSocketKeepAlive(boolean socketKeepAlive) {
|
||||||
|
this.socketKeepAlive = socketKeepAlive;
|
||||||
|
}
|
||||||
|
|
||||||
public Restclient getRestclient() {
|
public Restclient getRestclient() {
|
||||||
return this.restclient;
|
return this.restclient;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ import org.apache.http.auth.UsernamePasswordCredentials;
|
||||||
import org.apache.http.client.config.RequestConfig;
|
import org.apache.http.client.config.RequestConfig;
|
||||||
import org.apache.http.impl.client.BasicCredentialsProvider;
|
import org.apache.http.impl.client.BasicCredentialsProvider;
|
||||||
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
|
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
|
||||||
|
import org.apache.http.impl.nio.reactor.IOReactorConfig;
|
||||||
import org.elasticsearch.client.RestClient;
|
import org.elasticsearch.client.RestClient;
|
||||||
import org.elasticsearch.client.RestClientBuilder;
|
import org.elasticsearch.client.RestClientBuilder;
|
||||||
import org.elasticsearch.client.sniff.Sniffer;
|
import org.elasticsearch.client.sniff.Sniffer;
|
||||||
|
|
@ -155,6 +156,8 @@ class ElasticsearchRestClientConfigurations {
|
||||||
@Override
|
@Override
|
||||||
public void customize(HttpAsyncClientBuilder builder) {
|
public void customize(HttpAsyncClientBuilder builder) {
|
||||||
builder.setDefaultCredentialsProvider(new PropertiesCredentialsProvider(this.properties));
|
builder.setDefaultCredentialsProvider(new PropertiesCredentialsProvider(this.properties));
|
||||||
|
map.from(this.properties::isSocketKeepAlive).whenTrue()
|
||||||
|
.to(keepalive -> builder.setDefaultIOReactorConfig(IOReactorConfig.custom().setSoKeepAlive(keepalive).build()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -183,6 +183,23 @@ class ElasticsearchRestClientAutoConfigurationTests {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void socketKeepAliveDefaults() {
|
||||||
|
RestClient client = RestClient.builder(new HttpHost("localhost", 9201, "http")).build();
|
||||||
|
assertThat(client.getHttpClient()).extracting("connmgr.ioReactor.config.soKeepAlive").isEqualTo(Boolean.FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void configureWithCustomSocketKeepAlive() {
|
||||||
|
this.contextRunner.withPropertyValues("spring.elasticsearch.socket-keep-alive=true").run(
|
||||||
|
context -> {
|
||||||
|
assertThat(context).hasSingleBean(RestClient.class);
|
||||||
|
RestClient client = context.getBean(RestClient.class);
|
||||||
|
assertThat(client.getHttpClient()).extracting("connmgr.ioReactor.config.soKeepAlive").isEqualTo(Boolean.TRUE);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void configureWithoutSnifferLibraryShouldNotCreateSniffer() {
|
void configureWithoutSnifferLibraryShouldNotCreateSniffer() {
|
||||||
this.contextRunner.withClassLoader(new FilteredClassLoader("org.elasticsearch.client.sniff"))
|
this.contextRunner.withClassLoader(new FilteredClassLoader("org.elasticsearch.client.sniff"))
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue