Короче говоря, вы должны использовать метод setConnectTimeout
(при создании RestClient).
Итак, вот конфигурация Java String Boot (2.1.1.RELEASE) I использовались (успешно установлены соединения и тайм-ауты сокетов) для ES (6,5 В).
Пожалуйста, правильно установите переменную ENV (в файле .yml) перед непосредственным использованием следующего источника.
/ / yml settings
elasticsearch:
hosts:
host1: // you can set as an array with > sign
name: hostname
port: 9200
username:
password:
connectTimeout: 6000
socketTimeout: 6000
// Класс конфигурации
@Configuration
public class ElasticSearchConfig {
@Autowired
private Environment environment;
@Bean(destroyMethod = "close", name = "esHighLevelRestClient")
public RestHighLevelClient highLevelClient() {
return new RestHighLevelClient(restClientBuilder());
}
@Bean(destroyMethod = "close")
public RestClient restClient() {
return restClientBuilder().build();
}
private RestClientBuilder restClientBuilder() {
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials(
environment.getProperty("elasticsearch.username"),
environment.getProperty("elasticsearch.password")));
// you can set N hosts
List<HttpHost> hosts = new ArrayList<>();
hosts.add(new HttpHost(
environment.getProperty("elasticsearch.hosts.host1.name", String.class),
environment.getProperty("elasticsearch.hosts.host1.port", Integer.class),
"http"));
return RestClient.builder(Iterables.toArray(hosts, HttpHost.class))
.setRequestConfigCallback(requestConfigBuilder -> requestConfigBuilder
.setConnectTimeout(environment.getProperty("elasticsearch.connectTimeout", Integer.class))
.setSocketTimeout(environment.getProperty("elasticsearch.socketTimeout", Integer.class)))
.setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider));
}}
Надеюсь, это поможет!