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(入門)

相關文章
相關標籤/搜索