扣丁學堂Java培訓之基於Springboot2.0構建ES的多客戶端

今天扣丁學堂Java培訓老師給大家分享一篇關於基於Springboot2.0構建ES的多客戶端詳解,首先當我們有時候操作es會有一些特殊的需求,例如需要操作的index使用了不同的es服務器、用戶名、密碼、參數等,這個時候我們需要使用不同的es的客戶端進行操作,但是我們又不希望拆分成多個項目進行使用,這個時候我們就需要在我們的配置中自己構建一套ES的多客戶端了。

文章目錄

pom.xml

ElasticsearchConfig.java

ElasticsearchRestClient.java

最終

pom.xml

首先是我們的pom.xml:

<dependencies>

    <dependency>

      <groupId>org.springframework.boot</groupId>

      <artifactId>spring-boot-starter</artifactId>

      <version>2.0.5.RELEASE</version>

    </dependency>

 

    <!--es for transport-->

    <dependency>

      <groupId>org.elasticsearch</groupId>

      <artifactId>elasticsearch</artifactId>

      <version>5.6.11</version>

    </dependency>

    <dependency>

      <groupId>org.elasticsearch.client</groupId>

      <artifactId>elasticsearch-rest-client</artifactId>

      <version>5.6.11</version>

    </dependency>

    <!--es sniffer-->

    <dependency>

      <groupId>org.elasticsearch.client</groupId>

      <artifactId>elasticsearch-rest-client-sniffer</artifactId>

      <version>5.6.3</version>

      <scope>compile</scope>

    </dependency>

    <!--es for rest-high-level-client-->

    <dependency>

      <groupId>org.elasticsearch.client</groupId>

      <artifactId>elasticsearch-rest-high-level-client</artifactId>

      <version>5.6.11</version>

    </dependency>

    <dependency>

      <groupId>org.apache.commons</groupId>

      <artifactId>commons-lang3</artifactId>

      <version>3.4</version>

    </dependency>

    <dependency>

      <groupId>com.alibaba</groupId>

      <artifactId>fastjson</artifactId>

      <version>1.2.39</version>

    </dependency>

    <dependency>

      <groupId>org.apache.logging.log4j</groupId>

      <artifactId>log4j-core</artifactId>

      <version>2.9.1</version>

    </dependency>

    <!-- SpringBoot 熱啓動 -->

    <dependency>

      <groupId>org.springframework.boot</groupId>

      <artifactId>spring-boot-devtools</artifactId>

    </dependency>

    <dependency>

      <groupId>org.apache.commons</groupId>

      <artifactId>commons-pool2</artifactId>

      <version>2.4.2</version>

    </dependency>

    <dependency>

      <groupId>org.elasticsearch.client</groupId>

      <artifactId>elasticsearch-rest-client-sniffer</artifactId>

      <version>5.6.0</version>

    </dependency>

    <dependency>

      <groupId>commons-io</groupId>

      <artifactId>commons-io</artifactId>

      <version>2.6</version>

    </dependency>

</dependencies>

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());

    }

    sniffOnFailureListener.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;

以上關於扣丁學堂Java培訓之基於Springboot2.0構建ES的多客戶端的全部內容,希望對大家的學習有所幫助,最後想要了解更多關於Java開發方面內容的小夥伴,請關注扣丁學堂Java培訓官網、微信等平臺,扣丁學堂IT職業在線學習教育有專業的Java講師爲您指導,此外扣丁學堂老師精心推出的Java視頻教程定能讓你快速掌握Java從入門到精通開發實戰技能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章