2016-04-13 31 views
2

開始我使用這個代碼連接我的本地彈性服務器如何連接到這是遠程elasticsearch服務器並使用elasticsearch Java客戶端

 String url = "localhost:9200"; 
     String encodedUrl = URLEncoder.encode(url, "UTF-8"); 
     Node node = nodeBuilder().settings(
       Settings.settingsBuilder() 
         .put("http.enabled", false) 
         .put("path.home", encodedUrl) 
     ) 
       .client(true) 
       .data(false) 
       .node(); 
     return node.client(); 

我使用這個代碼來連接遠程彈性服務器

 // Transport client way 


     Settings settings = Settings.settingsBuilder() 
       .put("cluster.name", "Test") // remote elastic cluster name which is different in my case 
       .build(); 
     Client client = TransportClient.builder().settings(settings).build() 
       .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("**.**.***.**"), 9259)); // my remote elastic server IP and its port 
     return client; 


     // And my other way of connecting (Node Client way)is 


     String url = "**.**.***.**:9259"; 

     String encodedUrl = URLEncoder.encode(url, "UTF-8"); 
     Node node = nodeBuilder().settings(
       Settings.settingsBuilder() 
         .put("http.enabled", false) 
         .put("path.home", encodedUrl) 
         .put("discovery.zen.ping.unicast.hosts", "52.74.***.**") 
         .put("cluster.name", "Test") 
     ) 
       .client(true) 
       .data(false) 
       .node(); 
     return node.client(); 

我能連接我的本地服務器的彈性,但我無法連接到遠程服務器的彈性,總是有一些錯誤來

NodeNotConnecte dException:

SendRequestTransportException

ReceiveTimeoutTransportException

NodeNotAvailableException:

等等

誰能幫我弄清楚如何遠程彈性使用Java服務器連接,因爲我在dropwizard框架中開發web應用程序並需要從這些彈性API服務器獲取數據

同時建立與遠程服務器ES客戶端連接這個事情發生

INFO [2016-04-13 11:23:45,826] org.elasticsearch.node: [Thunderbolt] version[2.2.0], pid[4720], build[8ff36d1/2016-01-27T13:32:39Z] 
INFO [2016-04-13 11:23:45,826] org.elasticsearch.node: [Thunderbolt] initializing ... 
INFO [2016-04-13 11:23:45,826] org.elasticsearch.plugins: [Thunderbolt] modules [], plugins [], sites [] 
INFO [2016-04-13 11:23:46,039] org.elasticsearch.node: [Thunderbolt] initialized 
INFO [2016-04-13 11:23:46,039] org.elasticsearch.node: [Thunderbolt] starting ... 
INFO [2016-04-13 11:23:46,732] org.elasticsearch.transport: [Thunderbolt] publish_address {127.0.0.1:9302}, bound_addresses {127.0.0.1:9302}, {[::1]:9302} 
INFO [2016-04-13 11:23:46,732] org.elasticsearch.discovery: [Thunderbolt] Test/eZo2PDQuTcWdd3zsLzVm-w 
WARN [2016-04-13 11:24:16,748] org.elasticsearch.discovery: [Thunderbolt] waited for 30s and no initial state was set by the discovery 
INFO [2016-04-13 11:24:16,748] org.elasticsearch.node: [Thunderbolt] started 
+1

您運行的是什麼版本的ES的? – Val

+0

它在窗口上的2.2.1 – Tinku

回答

2

由於ES 2.x中,ES服務器將only bind to localhost by default,這意味着它是不是從外部訪問。

所以你的遠程ES的服務器上,確保您的elasticsearch.yml配置文件包含以下network.host設置有公共可到達的IP地址:

network.host: a.b.c.d 

其中a.b.c.d是遠程服務器的IP地址。

確保在進行更改後重新啓動ES。

+0

雅我可以從postman和chrome中的遠程ES服務器獲取數據,但是我無法將其綁定到我的java代碼中,就像我對本地服務器執行的操作 – Tinku

+0

作爲'network.host'設置有什麼作用你在客戶端代碼中使用了什麼? – Val

+0

它的IP地址配置爲52.74。***。**,在客戶端,我試圖獲取索引的數據 – Tinku

0

我想出答案是

Settings settings = Settings.settingsBuilder() 
      .put("cluster.name", "Test") 
      .build(); 
Client client = TransportClient.builder().settings(settings).build() 
      .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("**.**.***.**"), 9300)); // my remote elastic server IP and its port 
return client; 
相關問題