1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- package edu.travel.elastic;
- import org.apache.http.HttpHost;
- import org.apache.http.auth.AuthScope;
- import org.apache.http.auth.UsernamePasswordCredentials;
- import org.apache.http.client.CredentialsProvider;
- import org.apache.http.impl.client.BasicCredentialsProvider;
- import org.elasticsearch.client.RestClient;
- import org.elasticsearch.client.RestClientBuilder;
- import org.elasticsearch.client.RestHighLevelClient;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.stereotype.Component;
- import java.util.ArrayList;
- import java.util.List;
- @Configuration
- public class EsClient {
- @Autowired
- private ElasticsearchConfig elasticsearchConfig;
- /**
- * 如果@Bean没有指定bean的名称,那么方法名就是bean的名称
- */
- @Bean(name = "restHighLevelClient")
- public RestHighLevelClient restHighLevelClient() {
- // 构建连接对象
- RestClientBuilder builder = RestClient.builder(getEsHost());
- // 连接延时配置
- builder.setRequestConfigCallback(requestConfigBuilder -> {
- requestConfigBuilder.setConnectTimeout(elasticsearchConfig.getConnectTimeOut());
- requestConfigBuilder.setSocketTimeout(elasticsearchConfig.getSocketTimeOut());
- requestConfigBuilder.setConnectionRequestTimeout(elasticsearchConfig.getConnectionRequestTimeOut());
- return requestConfigBuilder;
- });
- // 连接数配置
- builder.setHttpClientConfigCallback(httpClientBuilder -> {
- httpClientBuilder.setMaxConnTotal(elasticsearchConfig.getMaxConnectNum());
- httpClientBuilder.setMaxConnPerRoute(elasticsearchConfig.getMaxConnectNumPerRoute());
- httpClientBuilder.setDefaultCredentialsProvider(getCredentialsProvider());
- return httpClientBuilder;
- });
- return new RestHighLevelClient(builder);
- }
- private HttpHost[] getEsHost() {
- // 拆分地址(es为多节点时,不同host以逗号间隔)
- List<HttpHost> hostLists = new ArrayList<>();
- String[] hostList = elasticsearchConfig.getHosts().split(",");
- for (String addr : hostList) {
- String host = addr.split(":")[0];
- String port = addr.split(":")[1];
- hostLists.add(new HttpHost(host, Integer.parseInt(port), elasticsearchConfig.getScheme()));
- }
- // 转换成 HttpHost 数组
- return hostLists.toArray(new HttpHost[]{});
- }
- private CredentialsProvider getCredentialsProvider() {
- // 设置用户名、密码
- CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
- credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(elasticsearchConfig.getUserName(), elasticsearchConfig.getPassword()));
- return credentialsProvider;
- }
- }
|