![Elasticsearch实战与原理解析](https://wfqqreader-1252317822.image.myqcloud.com/cover/554/30918554/b_30918554.jpg)
4.1 初级客户端初始化
在介绍如何使用初级客户端之前,我们先要了解初级客户端的主要功能,其主要功能包括:
(1)跨所有可用节点的负载平衡。
(2)在节点故障和特定响应代码时的故障转移。
(3)失败连接的惩罚机制。判断一个失败节点是否重试,取决于客户端连接时连续失败的次数;失败的尝试次数越多,客户端再次尝试同一节点之前等待的时间越长。
(4)持久连接。
(5)请求和响应的跟踪日志记录。
(6)自动发现群集节点,该功能可选。
在介绍完初级客户端的主要功能后,下面介绍初级客户端的使用。
1.获取客户端组件
首先,我们需要从Maven存储库中获取初级客户端的jar包。目前,初级客户端托管在Maven Central中央仓库中,其所需的Java最低版本为1.7。
需要指出的是,初级客户端保持了与Elasticsearch相同的发布周期。而客户端的版本和客户端可以通信的Elasticsearch的版本之间没有关系,即初级客户端可以与所有Elasticsearch版本兼容。
从Maven Central中央仓库,可以查到当前初级客户端的Maven依赖和Gradle依赖分别如下。
Maven依赖:
![](https://epubservercos.yuewen.com/A9D91A/16793577104229806/epubprivate/OEBPS/Images/38380_89_1.jpg?sign=1738991365-9JlcEmAYlP8Q5oqxqzCoFSQ0LlPHZNC5-0-3610d935454a4257fed616335e495368)
而elasticsearch-rest-client也是有依赖项的,这是因为是初级客户端内部需要使用Apache HTTP异步客户端发送HTTP请求,因此依赖于以下组件,即异步HTTP客户端及其自身的可传递依赖项,具体如下所示:
![](https://epubservercos.yuewen.com/A9D91A/16793577104229806/epubprivate/OEBPS/Images/38380_89_2.jpg?sign=1738991365-0Kn91sZYbD97NRvMXMtO4r24tuWrZPO8-0-63186b5fbba20349f75f766ff0d2d52f)
此时,工程中的POM文件(以Maven依赖为例)如下所示:
![](https://epubservercos.yuewen.com/A9D91A/16793577104229806/epubprivate/OEBPS/Images/38380_90_2.jpg?sign=1738991365-2n02Kq1V0MMQA8eB0IAxjiQm780yr178-0-4e7b45af23590ad1769c06fce2fba5c0)
![](https://epubservercos.yuewen.com/A9D91A/16793577104229806/epubprivate/OEBPS/Images/38380_91_1.jpg?sign=1738991365-WZzATjUkSegOnjiWidore3bpppRZP4Nw-0-82326f753047d90a95d06a8f41c1dd96)
2.客户端初始化
用户可以通过相应的RestClientBuilder类来构建RestClient实例,该类是通过RestClient builder(HttpHost…)静态方法创建的。
RestClient在初始化时,唯一需要的参数是客户端将与之通信的一个或多个主机作为HttpHost实例提供的,如下所示:
![](https://epubservercos.yuewen.com/A9D91A/16793577104229806/epubprivate/OEBPS/Images/38380_92_1.jpg?sign=1738991365-nAkEeF700m2CY0zolJowulkYTnAmpbIV-0-c5a8667b9eee97efb7c05c3d3986cd48)
对于RestClient类而言,RestClient类是线程安全的。在理想情况下,它与使用它的应用程序具有相同的生命周期。因此,当不再需要时,应该关闭它,以便释放它使用的所有资源及底层HTTP客户机实例及其线程,这一点很重要。关闭的方法如下所示:
![](https://epubservercos.yuewen.com/A9D91A/16793577104229806/epubprivate/OEBPS/Images/38380_92_2.jpg?sign=1738991365-J5F81hB6TiLR7DjvsveJqci49KxDfla4-0-f9114370985da1e800c3fe77e57ff1c2)
下面通过一段代码展示初级客户端初始化的使用。代码分为3层,分别是Controller层、Service层和ServiceImpl实现层。
其中,Controller层的代码如下所示:
![](https://epubservercos.yuewen.com/A9D91A/16793577104229806/epubprivate/OEBPS/Images/38380_92_3.jpg?sign=1738991365-tL2EYKTBXnCaLMcyBT6XUSRghRA8Z2nm-0-3b283bcfb124922a88d3dc0d9716863b)
Service层的代码如下所示:
![](https://epubservercos.yuewen.com/A9D91A/16793577104229806/epubprivate/OEBPS/Images/38380_92_4.jpg?sign=1738991365-r7rVmNYHcPfRQCsX9FJR02xk1yCGznHE-0-64040cb92fba9ae946ea0dd4d4bbe344)
ServiceImpl实现层的代码如下所示:
![](https://epubservercos.yuewen.com/A9D91A/16793577104229806/epubprivate/OEBPS/Images/38380_93_2.jpg?sign=1738991365-UL6U7DjBAFP6CF2EnL3GPKyxdV0GH6lD-0-84de5a6299e66c39b6fe3581f55b0021)
在运行代码之前,首先启动Elasticsearch服务,启动后,输出内容如下所示。
![](https://epubservercos.yuewen.com/A9D91A/16793577104229806/epubprivate/OEBPS/Images/38380_93_3.jpg?sign=1738991365-o1dMrWdqLB5Fwvhfw0wnjmEqbyiw3PLr-0-0e829d1b2c12fde31856bf4813180b4d)
然后编译工程,在工程根目录下输入如下命令:
![](https://epubservercos.yuewen.com/A9D91A/16793577104229806/epubprivate/OEBPS/Images/38380_93_4.jpg?sign=1738991365-JKMGQfjccB8skW2dJwjC9nAaoq4yUw3J-0-680cafc96be1248350242c331f7befb6)
接着通过下面的命令启动工程服务:
![](https://epubservercos.yuewen.com/A9D91A/16793577104229806/epubprivate/OEBPS/Images/38380_94_1.jpg?sign=1738991365-cAAb5HN4BnjrSKCYfkuaTMuS8rsXIDXF-0-f19c8ab4532728257a17aaee1a6dd2a0)
在工程服务启动后,在浏览器中调用如下接口查看Elasticsearch客户端的连接情况:
![](https://epubservercos.yuewen.com/A9D91A/16793577104229806/epubprivate/OEBPS/Images/38380_94_2.jpg?sign=1738991365-lih4XrOQiSytdXJC6sIp3gPAkpJqNbAX-0-efb7be9b5382789e571256be84a37675)
如图4-1所示。
![](https://epubservercos.yuewen.com/A9D91A/16793577104229806/epubprivate/OEBPS/Images/38380_94_3.jpg?sign=1738991365-7ciHhBGO91duR6ExCNM0T7VRr9HXMk8F-0-cda844a406a20cbb5a3e48285245c233)
图4-1
可以看到,浏览器页面输出了“Init ElasticSearch Over!”,即Elasticsearch客户端已经成功连接。
RestClientBuilder允许在构建RestClient时选择性地设置以下配置参数。
(1)请求头配置方法。
![](https://epubservercos.yuewen.com/A9D91A/16793577104229806/epubprivate/OEBPS/Images/38380_94_4.jpg?sign=1738991365-9h9WiGwL1L11Lq08iPWlBGEQJQwhOrKL-0-ab6bc40ca0df8701b9b95f5a7481fe7c)
(2)配置监听器。
![](https://epubservercos.yuewen.com/A9D91A/16793577104229806/epubprivate/OEBPS/Images/38380_94_5.jpg?sign=1738991365-nZeTYS5oTmJ6uDboGVT2d4scTL8BCZP5-0-ce939b24f739980e0ddd8c0b6da4be24)
(3)配置节点选择器。
![](https://epubservercos.yuewen.com/A9D91A/16793577104229806/epubprivate/OEBPS/Images/38380_95_1.jpg?sign=1738991365-8jSfdTDnFAAQ7m5UeOQYY79DyGnNNAQf-0-0054167a092265fad5203fa51dd4ec9d)
(4)设置超时时间。
![](https://epubservercos.yuewen.com/A9D91A/16793577104229806/epubprivate/OEBPS/Images/38380_95_2.jpg?sign=1738991365-XPhK75bEeou0a58DmLWVc0SLN9GlLbkw-0-809e8a1c4eaffb52fab085887760d880)