java与es8实战之二:实战前的准备工作
阅读原文时间:2023年08月24日阅读:4

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos

本篇概览

  • 本篇是《java与es8实战》系列的第二篇,主要任务是为动手实战做好准备工作,包括这些内容
  1. 借助docker,快速部署es服务
  2. 借助docker-compose,以更简单的方式部署es集群和kibana服务
  3. 介绍实战中涉及的环境信息,例如JDK、软件、库的版本
  4. 聊聊java操作es的基本套路
  5. 为整个《java与es8实战》系列创建父工程,后面的实战有关的代码,全部写在这个父工程下面
  • OK,开始

借助docker,快速部署es服务

借助docker-compose,以更简单的方式部署es集群和kibana服务

介绍实战中的环境信息,给您作为参考

  1. 操作系统:macOS Monterey(M1 Pro芯片的MacBook Pro,16G内存)
  2. Docker:Docker Desktop 4.7.1 (77678)
  3. ElasticSearch:8.2.2
  4. Kibana:8.2.2
  5. JDK:openjdk 11.0.14.1
  6. Maven:3.8.5
  7. IDEA: 2022.1.2 (Ultimate Edition)
  8. SpringBoot:2.7.0

聊聊java操作es的基本套路

  • 从es官方的视角来看,提供了三种操作es的方式
  1. Java Transport Client :提供异步操作es的客户端API,自7.0.0版本开始被废弃,所以本系列是用不上了
  2. Java REST Client:这个算是大名鼎鼎了,平常用的也很多,它由Low Level和Hight Level两部分组成,Low Level负责负载均衡、容错、持续连接、底层日志跟踪等基本能力,Hight Level是基于Low Level实现的,提供了原有的Transport Client的客户端能力,提供同步和异步两种操作模式,从7.X版本开始,es官方就给出了迁移指导:推荐用户从Java REST Client迁移到Java API Client
  3. Java API Client:官方主推方案,依赖Elasticsearch core,对请求和响应都有强类型约束,支持jackson和JSON-b等两种序列化&反序列化方案,所有API都提供了同步和异步两种方式,推荐使用fluent style+lambda模式编码
  • 从以上小结可以看出,在es8.x的环境下,使用Java API Client是首选,不过旧代码以Java REST Client居多,拿来也能在es8环境使用(通过一个api设置,让请求的header中带有兼容信息,es服务器收到此信息会以7.x模式处理请求)

  • 再从spring视角来看如何操作es

  1. Spring Data模块下属的Spring Data Elasticsearch是推荐的es操作方案
  2. High Level REST Client是Spring Data中默认的底层实现
  3. 尽管Spring Data依然支持Java Transport Client,但推荐使用的是High Level REST Client
  4. 遗憾的是,Spring Data目前还不支持Java API Client,也不支持es的8.x版本,详情如下表,来自官方

  • 由于《java与es8实战》系列已将es版本固定为8.2,因此,编码过程中,es操作方案选择es官方的Java API Client,和Spring Data不会有关系了

为整个《java与es8实战》系列创建父工程

  • 整个系列后面的文章,少不了写代码,还是提前建好工程吧,用maven建立一个父工程,后面的代码都放在这个父工程下面,方便jar包版本和代码资源的统一管理

  • 新建名为elasticsearch-tutorials的maven工程,其pom.xml内容如下,可见非常简单,仅仅是对jar做了些管理,再定义了一些常量,今后新增的子工程可以用到,例如SpringBoot版本为2.7.0


    http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.bolingcavalry</groupId>
    <artifactId>elasticsearch-tutorials</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>elasticsearch-tutorials</name>
    
    <properties>
        <java.version>11</java.version>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <!--    <maven-compiler-plugin.version>3.6.1</maven-compiler-plugin.version>-->
        <springboot.version>2.7.0</springboot.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <elastic.version>8.2.2</elastic.version>
    </properties>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>co.elastic.clients</groupId>
                <artifactId>elasticsearch-java</artifactId>
                <version>${elastic.version}</version>
            </dependency>
        &lt;dependency&gt;
            &lt;groupId&gt;com.fasterxml.jackson.core&lt;/groupId&gt;
            &lt;artifactId&gt;jackson-databind&lt;/artifactId&gt;
            &lt;version&gt;2.12.3&lt;/version&gt;
        &lt;/dependency&gt;
    
        &lt;!-- Needed only if you use the spring-boot Maven plugin --&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;jakarta.json&lt;/groupId&gt;
            &lt;artifactId&gt;jakarta.json-api&lt;/artifactId&gt;
            &lt;version&gt;2.0.1&lt;/version&gt;
        &lt;/dependency&gt;
    
    &lt;/dependencies&gt;
    </dependencyManagement>

  • 至此,准备工作算是完成了,接下来文章会很轻松,和大家聊聊关于Java API Client的一些重要知识点,毕竟后面写代码全指望它了

欢迎关注博客园:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴…

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器