X-Packを使用してESクラスターに接続します(Alibaba Cloud ESクラスター構成は5.3.3です)ポートは9300です

6を実際には知りませんでしたバージョンElasticSearchの担当者は、クラスターに接続するために推奨される9200クライアントと通信するために、このポート9300を推奨していません反復ES ES自体が、ポート9300コースをすぐに削除する可能性があるためです。ただし、実際の環境で単一ノードを使用することはお勧めしません

X-packを使用してESクラスターに接続します(ここではSpringBootを使用します)

1.ポン座標

		<!--x-pack-->
		<dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>x-pack-transport</artifactId>
            <version>5.3.3</version>
        </dependency>
        <!--es连接客户端-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.elasticsearch.client</groupId>
                    <artifactId>transport</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
		<!--log4j-->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.7</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.7</version>
        </dependency>

2.ymlファイルの書き込み

#ES 集群配置(version:5.3.3)
elasticSearch:
  host: es-cn-*************.public.elasticsearch.aliyuncs.com
  port: 9300
  cluster-name: ************
  user.password: elastic:*******

3.ES構成クラスを記述します

package com.search.config;

import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.xpack.client.PreBuiltXPackTransportClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.net.InetAddress;
import java.net.UnknownHostException;

@Configuration
public class ElasticsearchConfig {
    
    
    /**
     * es集群读取路径
     */
    public static final String X_PACK_ES_NAME = "cluster.name";
    /**
     * x-pack用户名密码读取路径
     */
    public static final String X_PACK_USER = "xpack.security.user";

    @Value("${elasticSearch.cluster-name}")
    private String esClusterName;
    @Value("${elasticSearch.host}")
    private String esHost;
    @Value("${elasticSearch.port}")
    private int esPort;
    @Value("${elasticSearch.user.password}")
    private String esUserPassword;

    private final Logger LOGGER = LoggerFactory.getLogger(ElasticsearchConfig.class);

    /**
     * elasticsearch客户端注入(配置)
     *
     * @return
     * @throws UnknownHostException
     */
    @Bean
    public TransportClient transportClient() throws UnknownHostException {
    
    
        TransportClient client = new PreBuiltXPackTransportClient(Settings.builder()
                .put(X_PACK_ES_NAME, esClusterName) //替换为对应阿里云Elasticsearch实例的ID
                .put(X_PACK_USER, esUserPassword) //阿里云Elasticsearch实例的用户名、密码
                .put("client.transport.sniff", false) //设置sniff为false
                .build())
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(esHost), esPort));
        return client;
    }

}

注:Alibaba Cloudの公式ドキュメントを参照できますが、バージョンの問題に注意を払う必要があります。バージョンの問題は、x-packのSpringBoot開発にとって非常に致命的です。この種の問題は当時、私は個人的にmvn- Treeを見て、相互に依存するバージョン全体を調べてから、Mavenローカルウェアハウスのアドレスを変更して再度ダウンロードしました。これは頭痛の種です。デモで接続を完了できることは明らかですが、Configurationでプロジェクトに挿入すると、機能しません。このメソッドは引き続きElasticTemplateをサポートします。このメソッドは、@ Documentの開発もサポートします。個人的には、このメソッドはClientメソッドよりもはるかに単純ですが、公式は9300の使用を推奨していないため、結局のところこれには理由があります。このメソッドは確かに安全ではありません。x-packは2017年に保守されなくなりました。まだ多くの未知の問題があります。 .Alibaba Cloudは現在、5.3.3でのみこの接続方法をサポートしています。残りはすべて通信に9200を使用しています。TCPはサポートされていません。

おすすめ

転載: blog.csdn.net/qq_43565087/article/details/107605812