package com.tzy.elasticsearch.config; import org.apache.http.HttpHost; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestClientBuilder; import org.elasticsearch.client.RestHighLevelClient; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration; import javax.annotation.PostConstruct; import java.util.ArrayList; import java.util.List; //@Configuration public class RestClientConfig extends AbstractElasticsearchConfiguration { // @Value("${elasticsearch.rest.uris}") private String uris; @Bean public RestHighLevelClient buildRestHighLevelClient() { return elasticsearchClient(); } /** * 防止netty的bug * java.lang.IllegalStateException: availableProcessors is already set to [4], rejecting [4] */ @PostConstruct void init() { System.setProperty("es.set.netty.runtime.available.processors", "false"); } @Override public RestHighLevelClient elasticsearchClient() { // 拆分地址 List hostLists = new ArrayList<>(); String[] hostArray = uris.split(","); for (String addr : hostArray) { String host = addr.split(":")[0]; String port = addr.split(":")[1]; hostLists.add(new HttpHost(host, Integer.parseInt(port), "http")); } // 转换成 HttpHost 数组 HttpHost[] httpHosts = hostLists.toArray(new HttpHost[]{}); // 构建连接对象 RestClientBuilder builder = RestClient.builder(httpHosts); // 设置用户名、密码 /*CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); credentialsProvider.setCredentials(AuthScope.ANY,new UsernamePasswordCredentials(userName,password));*/ // 连接延时配置 /*builder.setRequestConfigCallback(requestConfigBuilder -> { requestConfigBuilder.setConnectTimeout(connectTimeOut); requestConfigBuilder.setSocketTimeout(socketTimeOut); requestConfigBuilder.setConnectionRequestTimeout(connectionRequestTimeOut); return requestConfigBuilder; });*/ // 连接数配置 /*builder.setHttpClientConfigCallback(httpClientBuilder -> { httpClientBuilder.setMaxConnTotal(maxConnectNum); httpClientBuilder.setMaxConnPerRoute(maxConnectNumPerRoute); httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider); return httpClientBuilder; });*/ return new RestHighLevelClient(builder); /*final ClientConfiguration clientConfiguration = ClientConfiguration.builder() .connectedTo(uri) .build(); return RestClients.create(clientConfiguration).rest();*/ } }