運行一個 Java 應用程序和 Elasticsearch 時,有兩種操作模式可供使用。該應用程序可在 Elasticsearch 集群中扮演更加主動或更加被動的角色。在更加主動的情況下(稱為 Node Client),應用程序實例將從集群接收請求,確定哪個節點應處理該請求,就像正常節點所做的一樣。(應用程序甚至可以托管索引和處理請求。)另一種模式稱為 Transport Client,它將所有請求都轉發到另一個 Elasticsearch 節點,由后者來確定最終目標
ElasticSearch 服務默認端口 9300 (java操作的時候)
Web 管理平台端口 9200
Nodeclient的好處是提交代碼就是集群中的一台機器,node client知道整個集群的狀態,而且在執行api的時候可以少用一個網絡的跳躍
缺點:太沉重了,而且僅僅是api的網絡跳躍,對於整個集群來說,優化效果幾乎沒有
Transport Client有一個好處就是,如果我們要創建很多的連接,比如上千個連接,但是如果使用node client的話,就會有上千個node client假如集群;這樣就太沉重了,會給集群造成負擔;
如果使用的是Transport Client就輕了很多,因為Transport Client不是集群的一部分
導入maven
<dependencies>
<!-- Elasticsearch核心依賴包 -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>5.5.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.1</version>
</dependency>
</dependencies>
import org.elasticsearch.client.Client; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.InetSocketTransportAddress; import org.elasticsearch.transport.client.PreBuiltTransportClient; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.net.InetAddress; import java.net.UnknownHostException; /** * Created by angel on 2018/4/24. */ public class TestClientConn { public final static String HOST = "hadoop01"; public final static int PORT = 9300;//http請求的端口是9200,客戶端是9300 Settings settings = Settings.builder().put("cluster.name", "cluster_es").build(); TransportClient transportClient; @Test public void getConnection(){ try { //TODO PreBuiltTransportClient構建TransportClient連接遠程的elasticsearch transportClient = new PreBuiltTransportClient(settings) .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(HOST), PORT)); System.out.println("collection elasticsearch client:" + transportClient.toString()); } catch (UnknownHostException e) { e.printStackTrace(); }finally { transportClient.close(); } } }
