【问题标题】:Using Elasticsearch in java through TransportClient通过 TransportClient 在 java 中使用 Elasticsearch
【发布时间】:2017-09-12 19:30:43
【问题描述】:

我正在尝试通过 TransportClient 在 java 中使用 elasticsearch。我已经使用 logstash 将 mysql 与 elasticsearch 集成。 这就是我初始化和使用传输客户端的方式

TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"),9200));

我无法连接到节点并且我收到握手超时。 我收到以下错误:

TransportClientNodesService - failed to connect to node 
[{#transport#-1}{vrvVU4MGTAC7_5NCOiBseg}{localhost}{127.0.0.1:9200}], 
ignoring...
org.elasticsearch.transport.ConnectTransportException: [][127.0.0.1:9200] handshake_timeout[30s]
at org.elasticsearch.transport.TcpTransport.executeHandshake(TcpTransport.java:1614) ~[elasticsearch-5.5.2.jar:5.5.2]
at org.elasticsearch.transport.TcpTransport.openConnection(TcpTransport.java:555) ~[elasticsearch-5.5.2.jar:5.5.2]
at org.elasticsearch.transport.TcpTransport.openConnection(TcpTransport.java:116) ~[elasticsearch-5.5.2.jar:5.5.2]
at org.elasticsearch.transport.TransportService.openConnection(TransportService.java:351) ~[elasticsearch-5.5.2.jar:5.5.2]
at org.elasticsearch.client.transport.TransportClientNodesService$SimpleNodeSampler.doSample(TransportClientNodesService.java:407) [elasticsearch-5.5.2.jar:5.5.2]
at org.elasticsearch.client.transport.TransportClientNodesService$NodeSampler.sample(TransportClientNodesService.java:357) [elasticsearch-5.5.2.jar:5.5.2]
at org.elasticsearch.client.transport.TransportClientNodesService$ScheduledNodeSampler.run(TransportClientNodesService.java:390) [elasticsearch-5.5.2.jar:5.5.2]
at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:569) [elasticsearch-5.5.2.jar:5.5.2]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_131]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_131]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_131]

【问题讨论】:

    标签: java elasticsearch


    【解决方案1】:

    Elasticsearch 传输端口是 9300,因此通过将 9200 替换为 9300 来更改您的客户端创建行,如下所示:

    TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"),9300));
    

    查找相关文档here

    如果您使用除默认 (elasticsearch) 以外的其他 cluster.name,则必须在创建 TransportClient 时进行设置,如下所示:

    Settings settings = Settings.builder()
            .put("cluster.name", "myClusterName").build();
    TransportClient client = new PreBuiltTransportClient(settings);
    //Add transport addresses and do something with the client...
    

    【讨论】:

    • 我应该在我的 logstash.conf 文件和其他地方也将端口更改为 9300 还是只在这里?
    • 只在上面一行。
    • 将错误视为“不是集群集群 [elasticsearch] 的一部分,忽略...”
    • 您是否配置了不同的cluster.name,那么您必须将集群名称提供给您的传输客户端。您可以找到设置集群名称的代码(在这里)[elastic.co/guide/en/elasticsearch/client/java-api/current/…
    • 是的,我已经解决了这个问题。非常感谢。我在这里找到了解决方案。 stackoverflow.com/questions/27170739/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    • 2015-06-14
    • 1970-01-01
    相关资源
    最近更新 更多