基于Springboot2.0构建ES的多客户端

网友投稿 290 2023-01-08


基于Springboot2.0构建ES的多客户端

有时候我们操作es的时候会有一些特殊的需求,例如需要操作的index使用了不同的es服务器、用户名、密码、参数等,这个时候我们需要使用不同的es的客户端进行操作,但是我们又不希望拆分成多个项目进行使用,这个时候我们就需要在我们的配置中自己构建一套ES的多客户端了。

文章目录

pom.xml

ElasticsearchConfig.java

ElasticsearchRestClient.java

最终

pom.xml

首先是我们的pom.xml:

org.springframework.boot

spring-boot-starter

2.0.5.RELEASE

org.elasticsearch

elasticsearch

5.6.11

org.elasticsearch.client

elasticsearch-rest-client

5.6.11

org.elasticsearch.client

elasticsearch-rest-client-sniffer

5.6.3

compile

org.elasticsearch.client

elasticsearch-rest-high-level-client

5.6.11

org.apache.commons

commons-lang3

3.4

com.alibaba

fastjson

1.2.39

org.apache.logging.log4j

log4j-core

2.9.1

org.springframework.boot

spring-boot-devtools

org.apache.commons

commons-pool2

2.4.2

org.elasticsearch.client

elasticsearch-rest-client-sniffer

5.6.0

commons-io

commons-io

2.6

ElasticsearchConfig.java

然后是我们的配置文件,我这里使用的是application.properties的配置文件,因为我们使用不同的信息,所以这里我就不写了,可以根据需求自行获取。

ElasticsearchRestClient.java

import cnkj.site.config.ElasticsearchConfig;

import lombok.extern.slf4j.Slf4j;

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.client.config.RequestConfig;

import org.apache.http.impl.client.BasicCredentialsProvider;

import org.elasticsearch.client.RestClient;

import org.elasticsearch.client.RestClientBuilder;

import org.elasticsearch.client.RestHighLevelClient;

import org.elasticsearch.client.sniff.SniffOnFailureListener;

import org.elasticsearch.client.sniff.Sniffer;

import org.elasticsearch.client.sniff.SnifferBuilder;

import org.springframework.beans.factory.annotation.Qualifier;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

/*

* @version 1.0 created by LXW on 2018/11/22 9:43

*/

@Slf4j

@Configuration

public class ElasticsearchClient {

@Bean(name = "HighESClient")

public RestClient restTomcatClient(ElasticsearchConfig elasticsearchConfig) {

final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();

credentialsProvider.setCredentials(AuthScope.ANY,

//es账号密码

new UsernamePasswordCredentials(elasticsearchConfig.getUsername(), elasticsearchConfig.getPassword()));

//自动扫描网段

//监听同网段服务

//Low Level Client init

RestClientBuilder builder = RestClient.builder(

new HttpHost(

elasticsearchConfig.getHost(),

Integer.valueOf(elasticsearchConfig.getPort()),

elasticsearchConfig.getSchema()

)

).setHttpClientConfigCallback(

httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider)

).setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback() {

@Override

public RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder builder) {

builder.setConnectTimeout(elasticsearchConfig.getConnectTimeout());

builder.setSocketTimeout(elasticsearchConfig.getSocketTimeout());

return builder;

}

})

.setMaxRetryTimeoutMillis(elasticsearchConfig.getMaxRetryTimeoutMillis());

builder.setMaxRetryTimeoutMillis(elasticsearchConfig.getMaxRetryTimeoutMillis());

SniffOnFailureListener sniffOnFailureListener = new SniffOnFailureListener();

builder.setFailureListener(sniffOnFailureListener);

RestClient lowLevelRestClient = builder.build();

SnifferBuilder snifferBuilder = Sniffer.builder(lowLevelRestClient).setSniffIntervalMillis(elasticsearchConfig.getSnifferinterval());

if (elasticsearchConfig.getFailuredelay() > 0) {

snifferBuilder.setSniffAfterFailureDelayMillis(elasticsearchConfig.getFailuredelay());

}

sniffOnhttp://FailureListener.setSniffer(snifferBuilder.build());

return lowLevelRestClient;

}

@Bean(name = "HighLevelESClient")

public RestHighLevelClient restHighLevelClient(@Qualifier("HighESClient") RestClient restClient) {

return new RestHighLevelClient(restClient);

}

}

最终

在需要使用的地方直接通过注入的方式使用不同的客户端

@Resource(name = "HighLevelESClient")

private RestHighLevelClient client;


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:微服务网关用什么实现(net微服务网关)
下一篇:自动扫描接口测试(扫描仪常用接口)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~