《探錯筆記》之Springboot集成ES報org.elasticsearch.client.transport.NoNodeAvailableException異常

問題

目前出現以下異常

org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available

的大部分原因都是因爲springboot直接使用

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>

但是springboot的版本不同,支持的elasticsearch版本不一樣
在使用SpringBoot整合Elasticsearch 之前,我們應該瞭解下它們之間對應版本的關係。

Spring Boot Version (x) Spring Data Elasticsearch Version (y) Elasticsearch Version (z)
x <= 1.3.5 y <= 1.3.4 z <= 1.7.2*
x >= 1.4.x 2.0.0 <=y < 5.0.0** 2.0.0 <= z < 5.0.0**

這裏我們使用的SpringBoot的版本是2.X,那麼支持的Elasticsearch版本5+,當連接的ES版本不兼容就會出異常

解決辦法

1、JestClient

隨着ElasticSearch的版本變更,相關的Java API也在做不斷的調整,就是ElasticSearch服務端版本進行更改之後,客戶端的代碼可能需要重新編寫。

因此介紹一個相當好用的第三方工具JestClient,它對ElasticSearch進行封裝,填補了 ElasticSearch HttpRest接口 客戶端的空白,它適用於ElasticSearch2.x以上的版本,無需因爲ElasticSearch服務端版本更改而對代碼進行更改!

2、RestHighLevelClient

Java高級別REST客戶端(The Java High Level REST Client)以後簡稱高級客戶端,內部仍然是基於低級客戶端。它提供了更多的API,接受請求對象作爲參數並返回響應對象,由客戶端自己處理編碼和解碼。
每個API都可以同步或異步調用。 同步方法返回一個響應對象,而異步方法的名稱以async後綴結尾,需要一個監聽器參數,一旦收到響應或錯誤,就會被通知(由低級客戶端管理的線程池)。
高級客戶端依賴於Elasticsearch core項目。 它接受與TransportClient相同的請求參數並返回相同的響應對象。
兼容性
高級客戶端需要Java 1.8並依賴於Elasticsearch core項目。 客戶端版本需要與Elasticsearch版本相同。 它與TransportClient請求的參數和返回響應對象相同。 如果您需要將應用程序從TransportClient遷移到新的REST客戶端,請參閱“遷移指南”。
要能夠與Elasticsearch進行通信,主版本號需要一致,次版本號不必相同,因爲它是向前兼容的。次版本號小於等於elasticsearch的都可以。這意味着它支持與更高版本的Elasticsearch進行通信。
6.0客戶端能夠與任何6.x Elasticsearch節點通信,而6.1客戶端肯定能夠與6.1,6.2和任何後來的6.x版本進行通信,但與舊版本的Elasticsearch節點通信時可能會存在不兼容的問題,例如6.1和6.0之間,可能6.1客戶端支持elasticsearch 6.0還沒出來的API。
建議在將Elasticsearch集羣升級到新的主要版本時升級高級客戶端,因爲REST API中斷更改可能會導致意料之外的結果,具體取決於請求所擊中的節點,以及新添加的API只能被更新的客戶端版本支持。應該在羣集中的所有節點都升級到新的主要版本之後,客戶端才更新。

關注Github:1/2極客

關注博客:御前提筆小書童

關注網站:HuMingfeng

關注公衆號:開發者的花花世界

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章