ES创建连接时报错提示连接不上

1 篇文章 0 订阅

遇到的问题是:我需要连接的是19301端口,但是提示的报错一直在连接19401端口connect timeout,而本机只开了19301端口

原因:设置client.transport.sniff为true来使客户端去嗅探整个集群的状态,把集群中其它机器的ip地址加到客户端中。这样做的好处是,一般你不用手动设置集群里所有集群的ip到连接客户端,它会自动帮你添加,并且自动发现新加入集群的机器
ES客户端开启嗅探

当ES服务器监听(publish_address )使用内网服务器IP,尽量不要设置client.transport.sniff为true。不设置client.transport.sniff时,默认为false(关闭客户端去嗅探整个集群的状态)。因为在自动发现时会使用内网IP进行通信,导致无法连接到ES服务器。因此此时需要直接使用addTransportAddress方法把集群中其它机器的ip地址加到客户端中。

import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

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

@Slf4j
@Component
public class EsUtil {

    @Value("${elasticsearch.clusterNodes}")
    private  String clusterNodes;

    @Value("${elasticsearch.clusterName}")
    private  String clusterName;

    public TransportClient createClient() throws Exception {

        System.setProperty("es.set.netty.runtime.available.processors", "false");
        // client.transport.sniff 为true开启集群嗅探,如果有其它端口也会去建立连接
        /*Settings settings = Settings.builder().put("cluster.name", clusterName)
                .put("client.transport.sniff", true)
                .put("thread_pool.search.size", Integer.parseInt("20")).build();*/
        Settings settings = Settings.builder().put("cluster.name", clusterName)
                .put("client.transport.sniff", false)
                .put("thread_pool.search.size", Integer.parseInt("20")).build();
        TransportClient client =  client = new PreBuiltTransportClient(settings);
        try{
            if (clusterNodes != null && !"".equals(clusterNodes)) {
                for (String node : clusterNodes.split(",")) {
                    String[] nodeInfo = node.split(":");
                    client.addTransportAddress(new TransportAddress(InetAddress.getByName(nodeInfo[0]), Integer.parseInt(nodeInfo[1])));
                }
            }
        }catch (Exception e){
            log.error("初始化ES连接出现异常===" + (e.getMessage() == null ? e.getMessage():e.getCause()));
        }

        return client;

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值