Java調用Elasticsearch api 創建客戶端報錯NoNodeAvailableException[None of the configured nodes are available

NoNodeAvailableException[None of the configured nodes are available

這個報錯,意思就是你要連接的節點不可用,連不上,一般有以下幾個原因:

1、ES服務沒啓動,肯定連不上,可以訪問下9200端口試下;

2、端口使用錯了,在Java創建es的client連接,要使用9300端口(TCP端口,客戶端連接使用此端口,在配置文件elasticsearch.yml裏配置的,默認9300),不是9200(HTTP端口,RESTful api使用此端口);

3、9300端口沒開通訪問權限,防火牆限制了;

4、沒有使用默認的應用名稱,導致cluster name不一致;cluster.name  配置的,和代碼使用的必須一致。

下面給一個連接實例:

    @Bean
    public ElasticsearchTemplate elasticsearchTemplate(){
        try {
            //設置集羣名稱
            Settings settings = Settings.builder()
                    .put("cluster.name", globalConfig.getEsClusterName())//必須與es配置文件裏的cluster name 一致
                    .put("client.transport.sniff", true)
                    .build();
            //構建TransportAddress
            String hosts = globalConfig.getEsClusterHost();
            int port = Integer.parseInt(globalConfig.getEsClusterPort());//9300
            List<TransportAddress> addressList = new ArrayList<>();
            if(!StringUtils.isEmpty(hosts)){
                for(String host:hosts.split(",")){
                    addressList.add(new InetSocketTransportAddress(InetAddress.getByName(host),port));
                }
            }
            //創建client
            Client client = new PreBuiltTransportClient(settings).addTransportAddresses(
                    (TransportAddress[])addressList.toArray(new TransportAddress[addressList.size()]));
            return new ElasticsearchTemplate(client);
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章