SpringBoot -ElasticSearch RestHighLevelClient 高级客户端使用(1) 初始化

2023-10-27

此处使用ElasticSearch6.4.2版本
SpringBoot 和ElasticSearch 环境以及 安装ik分词等操作不再缀诉,直接进入整合,本节不阐述原理

  1. 导入依赖
    此处使用的elasticsearch为6.4.2版本,SpringBoot 版本为2.0.6
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>6.4.2</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>6.4.2</version>
        </dependency>
  1. 创建配置文件
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;

@Configuration
@ComponentScan(basePackageClasses=ESClientSpringFactory.class)
public class ESConfig {
    @Value("${elasticSearch.host}")
    private String host;

    @Value("${elasticSearch.port}")
    private int port;

    @Value("${elasticSearch.client.connectNum}")
    private Integer connectNum;

    @Value("${elasticSearch.client.connectPerRoute}")
    private Integer connectPerRoute;

    @Bean
    public HttpHost httpHost(){
        return new HttpHost(host,port,"http");
    }

    @Bean(initMethod="init",destroyMethod="close")
    public ESClientSpringFactory getFactory(){
        return ESClientSpringFactory.
                build(httpHost(), connectNum, connectPerRoute);
    }

    @Bean
    @Scope("singleton")
    public RestClient getRestClient(){
        return getFactory().getClient();
    }

    @Bean
    @Scope("singleton")
    public RestHighLevelClient getRHLClient(){
        return getFactory().getRhlClient();
    }

}
  1. 创建clientFactory
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;

import java.io.IOException;

public class ESClientSpringFactory {

    public static int CONNECT_TIMEOUT_MILLIS = 1000;
    public static int SOCKET_TIMEOUT_MILLIS = 30000;
    public static int CONNECTION_REQUEST_TIMEOUT_MILLIS = 500;
    public static int MAX_CONN_PER_ROUTE = 10;
    public static int MAX_CONN_TOTAL = 30;

    private static HttpHost HTTP_HOST;
    private RestClientBuilder builder;
    private RestClient restClient;
    private RestHighLevelClient restHighLevelClient;

    private static ESClientSpringFactory esClientSpringFactory = new ESClientSpringFactory();

    private ESClientSpringFactory(){}

    public static ESClientSpringFactory build(HttpHost httpHost,
                                              Integer maxConnectNum, Integer maxConnectPerRoute){
        HTTP_HOST = httpHost;
        MAX_CONN_TOTAL = maxConnectNum;
        MAX_CONN_PER_ROUTE = maxConnectPerRoute;
        return  esClientSpringFactory;
    }

    public static ESClientSpringFactory build(HttpHost httpHost,Integer connectTimeOut, Integer socketTimeOut,
                                              Integer connectionRequestTime,Integer maxConnectNum, Integer maxConnectPerRoute){
        HTTP_HOST = httpHost;
        CONNECT_TIMEOUT_MILLIS = connectTimeOut;
        SOCKET_TIMEOUT_MILLIS = socketTimeOut;
        CONNECTION_REQUEST_TIMEOUT_MILLIS = connectionRequestTime;
        MAX_CONN_TOTAL = maxConnectNum;
        MAX_CONN_PER_ROUTE = maxConnectPerRoute;
        return  esClientSpringFactory;
    }


    public void init(){
        builder = RestClient.builder(HTTP_HOST);
        setConnectTimeOutConfig();
        setMutiConnectConfig();
        restClient = builder.build();
        restHighLevelClient = new RestHighLevelClient(builder);
        System.out.println("init factory");
    }
    // 配置连接时间延时
    public void setConnectTimeOutConfig(){
        builder.setRequestConfigCallback(requestConfigBuilder -> {
            requestConfigBuilder.setConnectTimeout(CONNECT_TIMEOUT_MILLIS);
            requestConfigBuilder.setSocketTimeout(SOCKET_TIMEOUT_MILLIS);
            requestConfigBuilder.setConnectionRequestTimeout(CONNECTION_REQUEST_TIMEOUT_MILLIS);
            return requestConfigBuilder;
        });
    }
    // 使用异步httpclient时设置并发连接数
    public void setMutiConnectConfig(){
        builder.setHttpClientConfigCallback(httpClientBuilder -> {
            httpClientBuilder.setMaxConnTotal(MAX_CONN_TOTAL);
            httpClientBuilder.setMaxConnPerRoute(MAX_CONN_PER_ROUTE);
            return httpClientBuilder;
        });
    }

    public RestClient getClient(){
        return restClient;
    }

    public RestHighLevelClient getRhlClient(){
        return restHighLevelClient;
    }

    public void close() {
        if (restClient != null) {
            try {
                restClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        System.out.println("close client");
    }
}
  1. 添加配置,在application.properties里添加以下内容
elasticSearch.host=172.17.0.1
elasticSearch.port=9200
elasticSearch.client.connectNum=10
elasticSearch.client.connectPerRoute=50

至此整合完成
启动后RestHighLevelClient 处于可用状态
使用

@Autowired
private RestHighLevelClient rhlClient;

即可调用RestHighLevelClient

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot -ElasticSearch RestHighLevelClient 高级客户端使用(1) 初始化 的相关文章

随机推荐

  • 《Data Cleansing for Models Trained with SGD》笔记

    1 在其 appendix B 中证 Lemma 7 时说由于 1 s
  • AD18设置默认线宽

    点击设计 gt 规则 选择Routing gt Width 在这里设置
  • 图像格式互转

    一 灰度图转YUV 由于工作需要 经常接触12bit灰度数据 因此在这里将数据的处理记录下来 经常接触的是sensor输出的12bit灰度数据 按照需求经常会将这份数据转换成其他格式 如16bit灰度数据 高4bit为0 YUV数据等 其中
  • asio(十一)、udp异步服务器

    官网教程 https think async com Asio asio 1 26 0 doc asio tutorial tutdaytime6 html udp异步服务器 int main try 创建一个服务器对象来接受传入的客户端请
  • MaxCompute实例相关操作

    通过MaxCompute提交的SQL Spark和MapReduce等作业会实例化 以MaxCompute实例 Instance 的形式存在 MaxCompute实例有对应的实例ID 实例ID永久有效 且全局唯一 查看实例信息 查看实例信息
  • 检查蓝牙是否连接

    检查蓝牙是否连接 private BroadcastReceiver mBlueToothReceiver new BroadcastReceiver Override public void onReceive Context conte
  • npm用法及离线安装方法

    npm用法及离线安装方法 基本的用法 查看某个模块的全部信息 或者可以查看单个信息 npm info name npm info name version npm info name homepage install支持多种手段 包名 gi
  • 图像分类&图像检索

    图像检索 基于深度学习的图片检索 图像检索 指基于内容的图像检索 即以图搜图 则是给定一幅查询图像 搜索与之相似 视觉或语义上 的图像 图像检索一般是提取图像特征后直接基于相似性 距离 度量标准计算查询图特征和数据库中图像特征之间的相似性
  • 学习笔记(三)基于FPGA的频率计

    1 原理 主要是通过两个计数器 在系统时钟下对高低电平保持时间计数 来实现计算输入信号的频率和占空比 2 Verilog代码 频率计 module freq cnt input clk input rst n input signal in
  • Hexo 字数和阅读时间统计插件

    项目地址 链接 hexo symbols count time 安装配置 安装插件 npm install hexo symbols count time save 在站点配置文件 config yml 中添加以下代码 symbols co
  • i686和x86_64的区别

    i686的解释 i代表intel系列的cpu 386 几乎适用于所有的 x86 平台 不论是旧的 pentum 或者是新的 pentum IV 与 K7 系列的 CPU等等 都可以正常的工作 那个 i 指的是 Intel 兼容的 CPU 的
  • c语言中,关于延迟函数的理解

    对于延迟 有些c基础的人都能够做到用for或while来实现 例如 include
  • Postern + Charles + Burpsuite 进行对 APP 进行抓包

    Postern Charles Burpsuite 进行对 APP 进行抓包 一 简单介绍 二 配置环境 三 配置 Charles 四 配置 postern 五 配置 Charles Burpsuite 六 Charles 和 Fiddle
  • STM32与ST-LINK/V2报错的解决方法

    追加阅读 STM32与ST LINK V2报错的解决方法 2 今天到入手了一块STM32F103C8T6最小系统版 想烧录点程序进去 发现keil5软件偶尔能检测到板子 大多数时候会报一堆错误 串口更是找不到 遇见的问题包括但不限于 ST
  • 【Qt】利用Tool Button控件创建下拉菜单按钮

    功能描述 利用qt进行界面设计和开发 创建下拉按钮 详细实现 1 在qt侧工具栏利用设计打开 ui文件 2 创建按钮 创建一个Tool Button按钮 并在属性窗口中的QToolButton栏中选中MenuButtonPopup属性 3
  • [从零开始学DeepFaceLab-3]: 使用-开发环境准备

    目录 1 GPU环境 1 1 安装N卡驱动程序 2 Python环境 2 1 安装Anaconda 2 2 安装tensorflow 2 3 GPU库的安装
  • linux用less查看文件内容,Linux文件内容查看 - less命令

    查看nohup out文件的内容 大于10万行 显示行号 显法读取文件的百分比 行号及总行数 root li384 34 data grainger images less NM nohup out 1 Searching for imag
  • MyBatis插入时获取自增id

    关于MyBatis在插入时获取自增id 1 1 注释方法 Insert insert into book bid bname price number cratedate values null bname price number cra
  • Netty网络编程(三):Channel详解

    文章目录 简介 Channel详解 异步IO和ChannelFuture Channel的层级结构 释放资源 事件处理 总结 简介 Channel是连接ByteBuf和Event的桥梁 netty中的Channel提供了统一的API 通过这
  • SpringBoot -ElasticSearch RestHighLevelClient 高级客户端使用(1) 初始化

    此处使用ElasticSearch6 4 2版本 SpringBoot 和ElasticSearch 环境以及 安装ik分词等操作不再缀诉 直接进入整合 本节不阐述原理 导入依赖 此处使用的elasticsearch为6 4 2版本 Spr