elasticsearch连接客户端

ES 架构图
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 大多是一样的。
 
官方学习链接
 
加入依赖
<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 说明   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

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据