您的位置 首页 java

java使用ElasticSearch的RestHighLevelClient集群配置

背景

从网上找 java 调用 ElasticSearch 的示例程序,大部分都是诸如下面的方式:

1.单机版本

 RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200, "http"));  

2.集群版本

 RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 9200, "http"), new HttpHost("localhost", 9201, "http"),
new HttpHost("localhost", 9202, "http")));  

这种写法有以下缺点

1.和通用的使用配置的方式不同(写死到代码中,无法灵活变动),

2.也不适用于生产环境ElasticSearch集群的调用(生产环境一般都是elasticsearch集群),。

3.常用的一些es配置如ConnectTimeOut等属性也没有设置。

解决方式

参考 zookeeper hbase hadoop 等系统的配置,我们将ElasticSearch的集群放入配置文件如properties文件,格式为:

es.httpHosts=host1:port1,host2:port2,host3:port3,…

es.connectTimeOut=3000

…………………………………….

这种方式的好处是可以存放到配置文件中,也可以放到配置中心中,修改时无需修改程序,只要重启集群机器即可。

那么如何创建ElasticSearch的客户端呢,以spring boot为例,定义EsClientConfig.java

 @Configuration
public class EsClientConfig {
@Value("${es.httpHostList}")
private String httpHostList;
@Value("${es.connectTimeout}")
private String connectTimeout;
//TODO more properties added

@Bean
public RestHighLevelClient restHighLevelClient() {
RestClientBuilder builder=RestClient.builder(init(httpHostList));
builder.setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback(RequestConfig.Builder requestConfigBuilder) {
requestConfigBuilder.setConnectTimeout(connectTimeout);
//TODO set more properties for builder
return requestConfig
}).setMaxRetryTimeoutMills("配置值");
}

private HttpHost[] init(String list) {
List<HttpHost> result=new ArrayList<>();
if(list.indexOf(",")==-1) {
String[] hostPort=list.split(":");
HttpHost httpHost=new HttpHost(hostPort[0], Integer .parseInt(hostPort[1]),"http");
result.add(httpHost);
}else {
String[] hosts=list.split(",");
for(int i=0;i<hosts.length;i++) {
String[] hostPort=hosts[i].split(":");
HttpHost httpHost=new HttpHost(hostPort[0],Integer.parseInt(hostPort[1]),"http");
result.add(httpHost);
}
}

HttpHost[] arr=new HttpHost[result.size()];
for(int i=0;i<result.size();i++) {
arr[i]=result.get(i);
}
return arr;
}
}
  

总结

很多开发,容易忽略demo和生产代码的差异,从而错误评估真实的工作量,导致加班加点的去代码,一些好的习惯慢慢积累,好的代码也要积累,可以充分减少重复性的工作。

文章来源:智云一二三科技

文章标题:java使用ElasticSearch的RestHighLevelClient集群配置

文章地址:https://www.zhihuclub.com/179428.shtml

关于作者: 智云科技

热门文章

网站地图