SpringBoot集成Elasticsearch使用RestHighLevelClient

1、引入pom.xml依赖

<!--引入elasticsearch依赖-->
<dependency>
	<groupId>org.elasticsearch.client</groupId>
	<artifactId>elasticsearch-rest-high-level-client</artifactId>
	<version>7.6.1</version>
</dependency>
<dependency>
	<groupId>org.elasticsearch</groupId>
	<artifactId>elasticsearch</artifactId>
	<version>7.6.1</version>
</dependency>

2、Elasticsearch配置类

package com.hdy.manage.configuration;

import org.apache.commons.lang3.StringUtils;
import org.apache.http.Header;
import org.apache.http.HttpHost;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.apache.http.message.BasicHeader;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.ArrayList;
import java.util.List;

/**
 * elasticsearch配置
 */
@Configuration
public class ElasticsearchConfiguration {

    @Value("${spring.data.elasticsearch.endpoints}")
    private String elasticsearchEndpoints;
    @Value("${spring.data.elasticsearch.connection-timeout}")
    private Integer connectTimeout;
    @Value("${spring.data.elasticsearch.socket-timeout}")
    private Integer socketTimeout;
    @Value("${spring.data.elasticsearch.connection-request-timeout}")
    private Integer connectionRequestTimeout;
    @Value("${spring.data.elasticsearch.max-conn-total}")
    private Integer maxConnTotal;
    @Value("${spring.data.elasticsearch.max-conn-per-route}")
    private Integer maxConnPerRoute;

    /**
     * 不要调用close方法进行关闭
     * @return
     * @throws Exception
     */
    @Bean
    public RestHighLevelClient restHighLevelClient() throws Exception {
        if (StringUtils.isBlank(elasticsearchEndpoints)) {
            throw new Exception("elasticsearch 节点信息获取失败,请在配置文件中配置");
        }
        List<HttpHost> hostList = new ArrayList<>();
        String[] endpoints = elasticsearchEndpoints.split(",");
        for (String endpoint : endpoints) {
            String[] endpointSpit = endpoint.split(":");
            hostList.add(new HttpHost(endpointSpit[0], Integer.parseInt(endpointSpit[1])));
        }
        RestClientBuilder restClientBuilder = RestClient.builder(hostList.toArray(new HttpHost[0]));
        // timeout=5, max=100
        restClientBuilder.setDefaultHeaders(new Header[]{new BasicHeader("Keep-Alive", "timeout=1800, max=1000")});
        // 异步httpclient连接延时配置
        restClientBuilder.setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback() {
            @Override
            public RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder requestConfigBuilder) {
                requestConfigBuilder.setConnectTimeout(connectTimeout);
                requestConfigBuilder.setSocketTimeout(socketTimeout);
                requestConfigBuilder.setConnectionRequestTimeout(connectionRequestTimeout);
                return requestConfigBuilder;
            }
        });
        // 异步httpclient连接数配置
        restClientBuilder.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
            @Override
            public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
                httpClientBuilder.setMaxConnTotal(maxConnTotal);
                httpClientBuilder.setMaxConnPerRoute(maxConnPerRoute);
                return httpClientBuilder;
            }

        });
        RestHighLevelClient restHighLevelClient = new RestHighLevelClient(restClientBuilder);
        return restHighLevelClient;
    }
}
  •  Elasticsearch客户端与服务器进行交互使用长连接,需要在header中设置Keep-Alive的timeout时间
  • Elasticsearch服务器端长连接长时间不使用会自动断开,但是客户端无感,所以可能会造成客户端下次请求客户端连接报错,因此需要设置Keep-Alive的timeout

3、application.properties文件

# 设置elasticsearch配置
spring.data.elasticsearch.endpoints=host:port,host:port,host:port
# 针对一个域名同时间正在使用的最多的连接数,默认值为 5
spring.data.elasticsearch.max-conn-per-route=20
# 同时间正在使用的最多的连接数,默认值为 2 * 5
spring.data.elasticsearch.max-conn-total=20
# 客户端和服务器建立连接超时时间
spring.data.elasticsearch.connection-timeout=10000
# 从服务器端到客户端传输数据超时时间
spring.data.elasticsearch.socket-timeout=30000
# 从连接池中获取连接超时时间
spring.data.elasticsearch.connection-request-timeout=500

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值