Elasticsearch Java Low Level REST Client(嗅探器)
https://segmentfault.com/a/1190000016828977?utm_source=tag-newest#articleHeader0
嗅探器
允许从正在运行的Elasticsearch集群中自动发现节点并将它们设置到现有的RestClient实例的最小的库,它默认使用节点信息api检索属于集群的节点,并使用jackson解析获得的json响应。
与Elasticsearch 2.x及以后版本兼容。
Javadoc
可以在https://artifacts.elastic.co/javadoc/org/elasticsearch/client/elasticsearch-rest-client-sniffer/6.4.2/index.html找到REST客户端嗅探器的javadoc。
Maven仓库
REST客户端嗅探器与Elasticsearch具有相同的发布周期,将版本替换为所需的嗅探器版本,首先使用5.0.0-alpha4发布版,嗅探器版本与客户端可以与之通信的Elasticsearch版本之间没有任何关系,嗅探器支持从Elasticsearch 2.x及以后来获取节点列表。
如果你正在寻找SNAPSHOT版本,可以通过https://snapshots.elastic.co/maven/获取Elastic Maven Snapshot存储库。
Maven配置
以下是如何使用maven作为依赖关系管理器来配置依赖关系,将以下内容添加到pom.xml文件中:
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client-sniffer</artifactId>
<version>6.4.2</version>
</dependency>
Gradle配置
以下是使用gradle作为依赖关系管理器配置依赖关系的方法,将以下内容添加到build.gradle文件中:
dependencies {
compile 'org.elasticsearch.client:elasticsearch-rest-client-sniffer:6.4.2'
}
使用
一旦创建了RestClient实例,如初始化中所示,可以将Sniffer与其关联,Sniffer将定期使用提供的RestClient(默认情况下每隔5分钟)从集群中获取当前节点的列表,并通过调用RestClient#setNodes来更新它们。
RestClient restClient = RestClient.builder(
new HttpHost("localhost", 9200, "http"))
.build();
Sniffer sniffer = Sniffer.builder(restClient).build();
关闭Sniffer以使其后台线程正确关闭并释放其所有资源非常重要,Sniffer对象应具有与RestClient相同的生命周期,并在客户端之前关闭:
sniffer.close();
restClient.close();
Sniffer默认每5分钟更新一次节点,可以通过提供(以毫秒为单位)来定制此间隔,如下所示:
RestClient restClient = RestClient.builder(
new HttpHost("localhost", 9200, "http"))
.build();
Sniffer sniffer = Sniffer.builder(restClient)
.setSniffIntervalMillis(60000).build();
也可以在失败时启用嗅探,这意味着在每次失败后,节点列表会立即更新,而不是在下面的普通嗅探轮询中,在这种情况下,需要首先创建SniffOnFailureListener,并在创建RestClient时提供。此外,一旦稍后创建了Sniffer,它就需要与同一个SniffOnFailureListener实例相关联,该实例将在每次失败时得到通知,并使用Sniffer执行所述的额外嗅探轮询。
SniffOnFailureListener sniffOnFailureListener = new SniffOnFailureListener();
RestClient restClient = RestClient.builder(new HttpHost("localhost", 9200))
.setFailureListener(sniffOnFailureListener)
.build();
Sniffer sniffer = Sniffer.builder(restClient)
.setSniffAfterFailureDelayMillis(30000)
.build();
sniffOnFailureListener.setSniffer(sniffer);
- 将失败监听器设置到
RestClient实例中。 - 在失败时嗅探,不仅每次失败后节点都会更新,但是,在失败后一分钟,默认情况下,还会比平时安排额外的嗅探轮询,假设事情会恢复正常,我们希望尽快发现。可以通过
setSniffAfterFailureDelayMillis方法在Sniffer创建时自定义所述间隔,请注意,如果未启用在失败时嗅探,则此最后一个配置参数无效,如上所述。 - 将
Sniffer实例设置到失败监听器。
Elasticsearch节点信息api不会返回连接到节点时使用的协议,而只返回其host:port键值对,因此默认情况下使用http,如果应该使用https,则必须手动创建ElasticsearchNodesSniffer实例并按如下方式提供:
RestClient restClient = RestClient.builder(
new HttpHost("localhost", 9200, "http"))
.build();
NodesSniffer nodesSniffer = new ElasticsearchNodesSniffer(
restClient,
ElasticsearchNodesSniffer.DEFAULT_SNIFF_REQUEST_TIMEOUT,
ElasticsearchNodesSniffer.Scheme.HTTPS);
Sniffer sniffer = Sniffer.builder(restClient)
.setNodesSniffer(nodesSniffer).build();
以同样的方式,也可以自定义sniffRequestTimeout,默认为一秒。这是在调用节点信息api时作为查询字符串参数提供的timeout参数,这样当超时在服务器端到期时,尽管它可能只包含作为集群一部分的节点的子集,但在此之前已响应的节点仍会返回有效响应。
RestClient restClient = RestClient.builder(
new HttpHost("localhost", 9200, "http"))
.build();
NodesSniffer nodesSniffer = new ElasticsearchNodesSniffer(
restClient,
TimeUnit.SECONDS.toMillis(5),
ElasticsearchNodesSniffer.Scheme.HTTP);
Sniffer sniffer = Sniffer.builder(restClient)
.setNodesSniffer(nodesSniffer).build();
此外,可以为高级用例提供自定义NodesSniffer实现,这些用例可能需要从外部源而不是从Elasticsearch获取节点:
RestClient restClient = RestClient.builder(
new HttpHost("localhost", 9200, "http"))
.build();
NodesSniffer nodesSniffer = new NodesSniffer() {
@Override
public List<Node> sniff() throws IOException {
return null;
}
};
Sniffer sniffer = Sniffer.builder(restClient)
.setNodesSniffer(nodesSniffer).build();
从外部源获取主机。
Elasticsearch Java Low Level REST Client(嗅探器)的更多相关文章
- 使用Java Low Level REST Client操作elasticsearch
Java REST客户端有两种风格: Java低级别REST客户端(Java Low Level REST Client,以后都简称低级客户端算了,难得码字):Elasticsearch的官方low- ...
- Elasticsearch java api操作(一)(Java Low Level Rest Client)
一.说明: 一.Elasticsearch提供了两个JAVA REST Client版本: 1.java low level rest client: 低级别的rest客户端,通过http与集群交互, ...
- Elasticsearch java api操作(二)(Java High Level Rest Client)
一.说明: 一.Elasticsearch提供了两个JAVA REST Client版本: 1.java low level rest client: 低级别的rest客户端,通过http与集群交互, ...
- 使用Java High Level REST Client操作elasticsearch
Java高级别REST客户端(The Java High Level REST Client)以后简称高级客户端,内部仍然是基于低级客户端.它提供了更多的API,接受请求对象作为参数并返回响应对象,由 ...
- Java High Level REST Client 使用示例
概述 ES 在 7.0 版本开始将废弃 TransportClient,8.0 版本开始将完全移除 TransportClient,取而代之的是 High Level REST Client,官方文档 ...
- Java High Level REST Client 中文API(仅供参考)
1.初始化 兼容性 Java High Level REST Client需要Java 1.8,并依赖于Elasticsearch核心项目,客户端版本与客户端开发的Elasticsearch版本相同, ...
- 【ES】Java High Level REST Client 使用示例(增加修改)
ES提供了多种编程语言的链接方式,有Java API,PHP API,.NET API 官网可以详细了解 https://www.elastic.co/guide/en/elasticsearch/c ...
- Java High Level REST Client 使用地理位置查询
Java High Level REST Client 使用地理位置查询 一.需求 二.对应的query语句 三.对应java代码 1.引入 jar 包 2.创建 RestHighLevelClien ...
- SpringBoot:elasticSearch 7.2.0 Java High Level REST Client 搜索 API
Springboot整合最新版elasticSearch参考之前的文章:SpingBoot:整合ElasticSearch 7.2.0 Search API SearchRequest用于与搜索文档, ...
随机推荐
- 3D Computer Grapihcs Using OpenGL - 09 Enable Depth Test
启用Depth Test OpenGL是个3D绘图API,也就是说不只有xy坐标轴,还有第三个坐标轴z,z轴的方向是垂直于屏幕,指向屏幕内. 靠近人眼的方向是负方向,标准化设备坐标的最小值是-1, 最 ...
- Count on a tree(树上路径第K小)
题目链接:https://www.spoj.com/problems/COT/en/ 题意:求树上A,B两点路径上第K小的数 思路:主席树实际上是维护的一个前缀和,而前缀和不一定要出现在一个线性表上. ...
- 解决:父类中的@NotNull无效以及@Notnull 验证list对象无效
解决方法如图: controller层 vo.param层 父类验证注解要使用@NotEmpty 不能使用 @NotNull,否则验证无效的,反正笔者是没有成功过
- 手把手教你做echarts图表系列之组织结构图
在实际项目中使用echarts越来越多了,今天从一个组织结构图开始,手把手教大家开发echarts图表. 公司里的组织结构图如下: 可以参考echarts入门教程:http://echarts.bai ...
- vue 通过绑定事件获取当前行的id
<div @click="router(items.productId)" style="float: left;" :key='items.produc ...
- Visual Studio使用技巧 +谷歌浏览器使用技巧总结
一.总结下visual studio常用的使用技巧,有助于提高效率: 1.给代码行打标记: ctrl + K :给行打标记:ctrl + K + N:切换标记,即使当前页关闭了,也可以适用此快捷键快 ...
- Windows下使用python3 + selenium实现网页自动填表功能
本文由博主(SunboyL)原创,转载请注明出处:https://www.cnblogs.com/SunboyL/p/11563345.html 因为工作原因,需要将xls文件的数据录入到网上.因为数 ...
- LongAdder 源码分析
LongAdder LongAdder 能解决什么问题?什么时候使用 LongAdder? 1)LongAdder 内部包含一个基础值[base]和一个单元[Cell]数组. 没有竞争的情况下,要累加 ...
- Week 8 - 338.Counting Bits & 413. Arithmetic Slices
338.Counting Bits - Medium Given a non negative integer number num. For every numbers i in the range ...
- 应用安全 - 代码审计 - JavaScript
JavaScript Prototype污染