转载

elasticsearch连接客户端

ES 架构图

elasticsearch连接客户端
ES支持的客户端连接方式
  • Transport 连接 端口 9300
  •  REST API ,端口 9200
Transport 客户端

这种连接方式对应于架构图中的Transport这一层,这种客户端连接方式是直接连接ES的节点,使用TCP的方式进行连接.

java client 使用 TransportClient,各种操作本质上都是异步的(可以用 listener,或返回 Future )。 

注意:ES的发展规划中在7.0版本开始将废弃 TransportClient,8.0版本中将完全移除 TransportClient,取而代之的是High Level REST Client。

High Level REST Client 中的操作API和java client 大多是一样的。

官方学习链接

https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/index.html

加入依赖

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>transport</artifactId>
    <version>6.2.4</version>
</dependency>

初始化关键代码

public void init() {

        Settings settings = Settings.builder().put("client.transport.ignore_cluster_name", true)
//                .put("client.transport.sniff", true)
//                .put("cluster.name", "bdp-es-orderwaybill")
                .build();
        try {
            transportClient = new PreBuiltTransportClient(settings);

            String[] hostAndPortArray = HTTP_URL.split(",");
            for (int i = 0; i < hostAndPortArray.length; i++) {
                String host = hostAndPortArray[i].split(":")[0];
                String port = hostAndPortArray[i].split(":")[1];
                // 6.x
//                transportClient.addTransportAddress(new TransportAddress(InetAddress.getByName(host), Integer.parseInt(port)) );
                //5.x
                transportClient.addTransportAddress(
                        new InetSocketTransportAddress(InetAddress.getByName(host), Integer.parseInt(port)) );
                httpHostList.add(hostAndPortArray[i]);
            }
            logger.info("Elasticsearch Java Transport Client init Successfully: {}", HTTP_URL);
        } catch (Exception e) {
            logger.error("Elasticsearch Java Transport Client init error: ", e);
        }
    }

初始化参数说明

cluster.name

指定集群的名字,如果集群的名字不是默认的elasticsearch,需指定。

client.transport.sniff

设置为true,将自动嗅探整个集群,自动加入集群的节点到连接列表中。

client.transport.ignore_cluster_name

Set to true to ignore cluster name validation of connected nodes. (since 0.19.4)

client.transport.ping_timeout

The time to wait for a ping response from a node. Defaults to 5s.

client.transport.nodes_sampler_interval

How often to sample / ping the nodes listed and connected. Defaults to 5s.

REST API 客户端

这种连接方式对应于架构图中的RESTful style API这一层,这种客户端的连接方式是RESTful风格的,使用http的方式进行连接

ES提供了两个JAVA REST client 版本

Java Low Level REST Client: 低级别的REST客户端,通过http与集群交互,用户需自己编组请求JSON串,及解析响应JSON串。兼容所有ES版本。

Java High Level REST Client: 高级别的REST客户端,基于低级别的REST客户端,增加了编组请求JSON串、解析响应JSON串等相关api。使用的版本需要保持和ES服务端的版本一致,否则会有版本问题。

Java Low Level REST Client 说明

特点,maven 引入、使用绍: https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-low.html

API doc : https://artifacts.elastic.co/javadoc/org/elasticsearch/client/elasticsearch-rest-client/6.2.4/index.html .

Java High Level REST Client 说明

从6.0.0开始加入的,目的是以java面向对象的方式来进行请求、响应处理。

每个API 支持 同步/异步 两种方式,同步方法直接返回一个结果对象。异步的方法以async为后缀,通过listener参数来通知结果。

高级java REST 客户端依赖Elasticsearch core project

兼容性说明:

依赖 java1.8 和 Elasticsearch core project

maven依赖

<dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>6.2.4</version>
 </dependency>
初始化关键代码
public void init() {
        String[] hostAndPortArray = REST_HTTP_URL.split(",");
        HttpHost[] httpPosts = new HttpHost[hostAndPortArray.length];
        for (int i = 0; i < hostAndPortArray.length; i++) {
            String host = hostAndPortArray[i].split(":")[0];
            String port = hostAndPortArray[i].split(":")[1];
            httpPosts[i] = new HttpHost(host, Integer.parseInt(port), SCHEMA);
            httpHostList.add(hostAndPortArray[i]);
        }
        RestClientBuilder builder = RestClient.builder(httpPosts);
        setConnectTimeOutConfig(builder);
        setMutiConnectConfig(builder);
        System.out.println("REST_HTTP_URL: " + REST_HTTP_URL);
        logger.info("Elasticsearch Java High Level REST Client init start!");
        //6.x 以上
//        restHighLevelClient = new RestHighLevelClient(builder);
        //5.x
        restClient = builder.build();
        restHighLevelClient = new RestHighLevelClient(restClient);
    }
ref https://www.cnblogs.com/leeSmall/p/9218779.html
原文  https://okayjam.com/index.php/2019/03/21/elasticsearch连接客户端/
正文到此结束
Loading...