EsClient.java 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package edu.travel.elastic;
  2. import org.apache.http.HttpHost;
  3. import org.apache.http.auth.AuthScope;
  4. import org.apache.http.auth.UsernamePasswordCredentials;
  5. import org.apache.http.client.CredentialsProvider;
  6. import org.apache.http.impl.client.BasicCredentialsProvider;
  7. import org.elasticsearch.client.RestClient;
  8. import org.elasticsearch.client.RestClientBuilder;
  9. import org.elasticsearch.client.RestHighLevelClient;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.context.annotation.Bean;
  12. import org.springframework.context.annotation.Configuration;
  13. import org.springframework.stereotype.Component;
  14. import java.util.ArrayList;
  15. import java.util.List;
  16. @Configuration
  17. public class EsClient {
  18. @Autowired
  19. private ElasticsearchConfig elasticsearchConfig;
  20. /**
  21. * 如果@Bean没有指定bean的名称,那么方法名就是bean的名称
  22. */
  23. @Bean(name = "restHighLevelClient")
  24. public RestHighLevelClient restHighLevelClient() {
  25. // 构建连接对象
  26. RestClientBuilder builder = RestClient.builder(getEsHost());
  27. // 连接延时配置
  28. builder.setRequestConfigCallback(requestConfigBuilder -> {
  29. requestConfigBuilder.setConnectTimeout(elasticsearchConfig.getConnectTimeOut());
  30. requestConfigBuilder.setSocketTimeout(elasticsearchConfig.getSocketTimeOut());
  31. requestConfigBuilder.setConnectionRequestTimeout(elasticsearchConfig.getConnectionRequestTimeOut());
  32. return requestConfigBuilder;
  33. });
  34. // 连接数配置
  35. builder.setHttpClientConfigCallback(httpClientBuilder -> {
  36. httpClientBuilder.setMaxConnTotal(elasticsearchConfig.getMaxConnectNum());
  37. httpClientBuilder.setMaxConnPerRoute(elasticsearchConfig.getMaxConnectNumPerRoute());
  38. httpClientBuilder.setDefaultCredentialsProvider(getCredentialsProvider());
  39. return httpClientBuilder;
  40. });
  41. return new RestHighLevelClient(builder);
  42. }
  43. private HttpHost[] getEsHost() {
  44. // 拆分地址(es为多节点时,不同host以逗号间隔)
  45. List<HttpHost> hostLists = new ArrayList<>();
  46. String[] hostList = elasticsearchConfig.getHosts().split(",");
  47. for (String addr : hostList) {
  48. String host = addr.split(":")[0];
  49. String port = addr.split(":")[1];
  50. hostLists.add(new HttpHost(host, Integer.parseInt(port), elasticsearchConfig.getScheme()));
  51. }
  52. // 转换成 HttpHost 数组
  53. return hostLists.toArray(new HttpHost[]{});
  54. }
  55. private CredentialsProvider getCredentialsProvider() {
  56. // 设置用户名、密码
  57. CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
  58. credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(elasticsearchConfig.getUserName(), elasticsearchConfig.getPassword()));
  59. return credentialsProvider;
  60. }
  61. }