Elasticsearch Java Low Level REST Client(嗅探器)

嗅探器

容许从正在运行的Elasticsearch集群中自动发现节点并将它们设置到现有的RestClient实例的最小的库,它默认使用节点信息api检索属于集群的节点,并使用jackson解析得到的json响应。html

与Elasticsearch 2.x及之后版本兼容。java

Javadoc

能够在https://artifacts.elastic.co/javadoc/org/elasticsearch/client/elasticsearch-rest-client-sniffer/6.4.2/index.html找到REST客户端嗅探器的javadoc。node

Maven仓库

REST客户端嗅探器与Elasticsearch具备相同的发布周期,将版本替换为所需的嗅探器版本,首先使用5.0.0-alpha4发布版,嗅探器版本与客户端能够与之通讯的Elasticsearch版本之间没有任何关系,嗅探器支持从Elasticsearch 2.x及之后来获取节点列表。json

若是你正在寻找SNAPSHOT版本,能够经过https://snapshots.elastic.co/maven/获取Elastic Maven Snapshot存储库。segmentfault

Maven配置

如下是如何使用maven做为依赖关系管理器来配置依赖关系,将如下内容添加到pom.xml文件中:api

<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来更新它们。elasticsearch

RestClient restClient = RestClient.builder(
        new HttpHost("localhost", 9200, "http"))
        .build();
Sniffer sniffer = Sniffer.builder(restClient).build();

关闭Sniffer以使其后台线程正确关闭并释放其全部资源很是重要,Sniffer对象应具备与RestClient相同的生命周期,并在客户端以前关闭:maven

sniffer.close();
restClient.close();

Sniffer默认每5分钟更新一次节点,能够经过提供(以毫秒为单位)来定制此间隔,以下所示:ide

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();

从外部源获取主机。


上一篇:通用配置

下一篇:Java High Level REST Client(入门)

相关文章
相关标签/搜索