zoukankan      html  css  js  c++  java
  • 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();

    从外部源获取主机。

  • 相关阅读:
    优化tableView加载cell与model的过程
    java.net.UnknownHostException: master
    Give root password for maintenance(or type control -D to continue)
    软件自动化部署脚本
    关于yum网络版仓库(本地yum仓库的安装配置,如果没网了,做一个局域网内的yum仓库)
    一脸懵逼学习keepalived(对Nginx进行热备)
    一脸懵逼学习Nginx及其安装,Tomcat的安装
    一脸懵逼学习Linux的Shell编程
    一脸懵逼学习KafKa集群的安装搭建--(一种高吞吐量的分布式发布订阅消息系统)
    一脸懵逼学习Storm的搭建--(一个开源的分布式实时计算系统)
  • 原文地址:https://www.cnblogs.com/xiang--liu/p/11492710.html
Copyright © 2011-2022 走看看