Elasticsearch没有启动,但抛出ReceiveTimeoutTransportException

时间:2014-03-14 13:12:37

标签: spring-mvc elasticsearch spring-data

我正在尝试使用java api进行弹性搜索,但是当我尝试运行应用程序时,我会遇到异常。

   18:13:52.378 [elasticsearch[Fallen One][generic][T#1]] INFO  org.elasticsearch.client.transport - [Fallen One] failed to get local cluster state for [#transport#-1][integra][inet[/127.0.0.1:9300]], disconnecting...
org.elasticsearch.transport.ReceiveTimeoutTransportException: [][inet[/127.0.0.1:9300]][cluster/state] request_id [52] timed out after [5001ms]
    at org.elasticsearch.transport.TransportService$TimeoutHandler.run(TransportService.java:356) [elasticsearch-1.0.1.jar:na]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_51]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_51]
    at java.lang.Thread.run(Thread.java:744) [na:1.7.0_51]
18:13:52.381 [elasticsearch[Fallen One][generic][T#1]] DEBUG org.elasticsearch.transport.netty - [Fallen One] disconnected from [[#transport#-1][integra][inet[/127.0.0.1:9300]]]
18:13:52.391 [elasticsearch[Fallen One][generic][T#3]] DEBUG org.elasticsearch.transport.netty - [Fallen One] connected to node [[#transport#-1][integra][inet[/127.0.0.1:9300]]]

连接弹性搜索的代码是

private String[] esNodes =  { "127.0.0.1:9300" };
 protected TransportClient buildClient() throws Exception {
        Settings settings = ImmutableSettings.settingsBuilder()
                .put("client.transport.sniff", true)
                .put("client.transport.ignore_cluster_name",true).build();

        TransportClient client = new TransportClient(settings);
        for (int i = 0; i < esNodes.length; i++) {
            client.addTransportAddress(toAddress(esNodes[i]));
        }
        return client;
    }

    private InetSocketTransportAddress toAddress(String address) {
        if (address == null) return null;

        String[] splitted = address.split(":");
        int port = 9300;
        if (splitted.length > 1) {
            port = Integer.parseInt(splitted[1]);
        }
        return new InetSocketTransportAddress(splitted[0], port);
    }

任何人都可以帮助我,我是弹性搜索新手,不知道如何解决这个问题。

3 个答案:

答案 0 :(得分:1)

我正在使用此代码连接到我的弹性搜索,并且非常好用。

Settings settings = ImmutableSettings.settingsBuilder()
            .put("cluster.name", clusterName).build();
this.client = new TransportClient(settings)
            .addTransportAddress(new InetSocketTransportAddress(ipAddress,9300));

其中ipAddress和Clustername是我的函数的参数。

答案 1 :(得分:0)

您应该查看笔记本电脑上的网络。检查您是否可以连接到localhost。您可以尝试的另一件事是启动两个具有相同配置的elasticsearch实例,以查看它们是否连接。最后看一下elasticsearch.yml的网络部分。当在本地计算机上遇到网络问题时,我通常会尝试以下两个选项:

network.host:localhost discovery.zen.ping.multicast.enabled:false discovery.zen.ping.unicast.hosts:[&#34; localhost&#34;]

答案 2 :(得分:-1)

我认为弹性搜索服务器未启动..尝试点击浏览器或卷曲评论..如果有效..试试上面的代码..

注意:如果您的JAVA API JAR VERSION DIFFERS也升级PROB ..(获取与ES版本相同的java api版本

注意:elasticsearch java api可以帮助你连接到elasticsearch ..但它无法使用api启动一个elasticsearch节点。

你的代码很好..它也是Vry标准..