摘要:嗅探器允許從正在運(yùn)行的集群中自動發(fā)現(xiàn)節(jié)點(diǎn)并將它們設(shè)置到現(xiàn)有的實(shí)例的最小的庫,它默認(rèn)使用節(jié)點(diǎn)信息檢索屬于集群的節(jié)點(diǎn),并使用解析獲得的響應(yīng)??梢栽谡业娇蛻舳诵崽狡鞯摹?/p>
嗅探器
允許從正在運(yùn)行的Elasticsearch集群中自動發(fā)現(xiàn)節(jié)點(diǎn)并將它們設(shè)置到現(xiàn)有的RestClient實(shí)例的最小的庫,它默認(rèn)使用節(jié)點(diǎn)信息api檢索屬于集群的節(jié)點(diǎn),并使用jackson解析獲得的json響應(yīng)。
與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具有相同的發(fā)布周期,將版本替換為所需的嗅探器版本,首先使用5.0.0-alpha4發(fā)布版,嗅探器版本與客戶端可以與之通信的Elasticsearch版本之間沒有任何關(guān)系,嗅探器支持從Elasticsearch 2.x及以后來獲取節(jié)點(diǎn)列表。
如果你正在尋找SNAPSHOT版本,可以通過https://snapshots.elastic.co/maven/獲取Elastic Maven Snapshot存儲庫。
Maven配置以下是如何使用maven作為依賴關(guān)系管理器來配置依賴關(guān)系,將以下內(nèi)容添加到pom.xml文件中:
Gradle配置org.elasticsearch.client elasticsearch-rest-client-sniffer 6.4.2
以下是使用gradle作為依賴關(guān)系管理器配置依賴關(guān)系的方法,將以下內(nèi)容添加到build.gradle文件中:
dependencies { compile "org.elasticsearch.client:elasticsearch-rest-client-sniffer:6.4.2" }使用
一旦創(chuàng)建了RestClient實(shí)例,如初始化中所示,可以將Sniffer與其關(guān)聯(lián),Sniffer將定期使用提供的RestClient(默認(rèn)情況下每隔5分鐘)從集群中獲取當(dāng)前節(jié)點(diǎn)的列表,并通過調(diào)用RestClient#setNodes來更新它們。
RestClient restClient = RestClient.builder( new HttpHost("localhost", 9200, "http")) .build(); Sniffer sniffer = Sniffer.builder(restClient).build();
關(guān)閉Sniffer以使其后臺線程正確關(guān)閉并釋放其所有資源非常重要,Sniffer對象應(yīng)具有與RestClient相同的生命周期,并在客戶端之前關(guān)閉:
sniffer.close(); restClient.close();
Sniffer默認(rèn)每5分鐘更新一次節(jié)點(diǎn),可以通過提供(以毫秒為單位)來定制此間隔,如下所示:
RestClient restClient = RestClient.builder( new HttpHost("localhost", 9200, "http")) .build(); Sniffer sniffer = Sniffer.builder(restClient) .setSniffIntervalMillis(60000).build();
也可以在失敗時啟用嗅探,這意味著在每次失敗后,節(jié)點(diǎn)列表會立即更新,而不是在下面的普通嗅探輪詢中,在這種情況下,需要首先創(chuàng)建SniffOnFailureListener,并在創(chuàng)建RestClient時提供。此外,一旦稍后創(chuàng)建了Sniffer,它就需要與同一個SniffOnFailureListener實(shí)例相關(guān)聯(lián),該實(shí)例將在每次失敗時得到通知,并使用Sniffer執(zhí)行所述的額外嗅探輪詢。
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);
將失敗監(jiān)聽器設(shè)置到RestClient實(shí)例中。
在失敗時嗅探,不僅每次失敗后節(jié)點(diǎn)都會更新,但是,在失敗后一分鐘,默認(rèn)情況下,還會比平時安排額外的嗅探輪詢,假設(shè)事情會恢復(fù)正常,我們希望盡快發(fā)現(xiàn)??梢酝ㄟ^setSniffAfterFailureDelayMillis方法在Sniffer創(chuàng)建時自定義所述間隔,請注意,如果未啟用在失敗時嗅探,則此最后一個配置參數(shù)無效,如上所述。
將Sniffer實(shí)例設(shè)置到失敗監(jiān)聽器。
Elasticsearch節(jié)點(diǎn)信息api不會返回連接到節(jié)點(diǎn)時使用的協(xié)議,而只返回其host:port鍵值對,因此默認(rèn)情況下使用http,如果應(yīng)該使用https,則必須手動創(chuàng)建ElasticsearchNodesSniffer實(shí)例并按如下方式提供:
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,默認(rèn)為一秒。這是在調(diào)用節(jié)點(diǎn)信息api時作為查詢字符串參數(shù)提供的timeout參數(shù),這樣當(dāng)超時在服務(wù)器端到期時,盡管它可能只包含作為集群一部分的節(jié)點(diǎn)的子集,但在此之前已響應(yīng)的節(jié)點(diǎn)仍會返回有效響應(yīng)。
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實(shí)現(xiàn),這些用例可能需要從外部源而不是從Elasticsearch獲取節(jié)點(diǎn):
RestClient restClient = RestClient.builder( new HttpHost("localhost", 9200, "http")) .build(); NodesSniffer nodesSniffer = new NodesSniffer() { @Override public Listsniff() throws IOException { return null; } }; Sniffer sniffer = Sniffer.builder(restClient) .setNodesSniffer(nodesSniffer).build();
從外部源獲取主機(jī)。
上一篇:通用配置 下一篇:Java High Level REST Client(入門)文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/71922.html
摘要:用于的官方高級別客戶端,基于低級別客戶端,它公開特定的方法,并負(fù)責(zé)請求編組和響應(yīng)反編組。入門初始化執(zhí)行請求讀取響應(yīng)日志記錄通用配置嗅探器在中被添加。依賴于核心項(xiàng)目,它接受與相同的請求參數(shù),并返回相同的響應(yīng)對象。 Elasticsearch Java REST Client Java REST Client有兩種類型: Java Low Level REST Client:用于Elast...
摘要:讀取響應(yīng)對象由同步方法返回或作為中的參數(shù)接收,它包裝客戶端返回的響應(yīng)對象并公開一些其他信息。有關(guān)執(zhí)行的請求的信息。返回響應(yīng)的主機(jī)。響應(yīng)體包含在對象中。對于返回狀態(tài)碼的請求,不會拋出,因?yàn)樗且粋€預(yù)期的響應(yīng),僅表示找不到該資源。 讀取響應(yīng) Response對象由同步performRequest方法返回或作為ResponseListener#onSuccess(Response)中的參數(shù)接...
閱讀 1516·2021-11-22 13:52
閱讀 1329·2021-09-29 09:34
閱讀 2727·2021-09-09 11:40
閱讀 3044·2019-08-30 15:54
閱讀 1273·2019-08-30 15:53
閱讀 984·2019-08-30 11:01
閱讀 1372·2019-08-29 17:22
閱讀 1966·2019-08-26 10:57