【问题标题】:ElasticSearch client connection impossibleElasticSearch 客户端连接不可能
【发布时间】:2018-10-05 00:05:30
【问题描述】:

我在使用 ElasticSearch 客户端时遇到问题。

我设计了一个 Java 应用程序(以完成我的开发人员学习),用于管理不同的数据库 MySQL、mongoDb 和 ElasticSearch。 我能够从一个数据库读取、创建和更新数据到另一个数据库。 一切都是用本地数据库设计和编码的,一切都很好。 所有测试都已经过验证,因此我们决定让它在真实数据库上的远程服务器上运行。

然后问题就开始发生了,尤其是我坚持了两天的问题,我真的很绝望。

  • 使用 TransportClient,它在本地工作,但在真实服务器上,它带来了 NoNodeAvailableException,表示没有配置的节点可用。尝试了很多方法让它工作,但它没有。

  • 所以我决定尝试使用 REST 进行连接和请求。这是我的代码,我得到的错误不是很详细:它是一个 ConnectException。

代码:

    // Get the connection client from ES database
    public static RestHighLevelClient getConnection()
    {
        // Singleton
        if(client == null)
        {
            try             
            {       
                // Set Credz
                final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
                credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("Login", "pwd"));             

                // Builder
                RestClientBuilder builder = RestClient.builder(new HttpHost("ServerIP", 9200, "http")).setHttpClientConfigCallback(new HttpClientConfigCallback() 
                {
                    @Override
                    public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) 
                    {   
                        System.out.println("Setting taken !");
                        return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
                    }
                });                 

                // Create client
                client = new RestHighLevelClient (builder);

                ClusterHealthRequest healthReq = new ClusterHealthRequest("looppy-cluster");
                ClusterHealthResponse response = client.cluster().health(healthReq, RequestOptions.DEFAULT);
    int numberOfNodes = response.getNumberOfNodes(); 
            System.out.println("Nodes Nb : " + numberOfNodes);

            } 
            catch(Exception ex)
            {   
System.out.println("Client connection problem");
                ex.printStackTrace();
            }
        }       

        return client;
    }   

这是我得到的例外:

    java.net.ConnectException
    at org.elasticsearch.client.RestClient$SyncResponseListener.get(RestClient.java:943)
    at org.elasticsearch.client.RestClient.performRequest(RestClient.java:227)
    at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:1256)
    at org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:1231)
    at org.elasticsearch.client.ClusterClient.health(ClusterClient.java:146)
    at utils.ElasticSearchMng.getConnection(ElasticSearchMng.java:86)
    at utils.ElasticSearchMng.getLoopiesFromES(ElasticSearchMng.java:133)
    at program.Program$1.run(Program.java:96)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$500(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.net.ConnectException
    at org.apache.http.nio.pool.RouteSpecificPool.timeout(RouteSpecificPool.java:168)
    at org.apache.http.nio.pool.AbstractNIOConnPool.requestTimeout(AbstractNIOConnPool.java:561)
    at org.apache.http.nio.pool.AbstractNIOConnPool$InternalSessionRequestCallback.timeout(AbstractNIOConnPool.java:822)
    at org.apache.http.impl.nio.reactor.SessionRequestImpl.timeout(SessionRequestImpl.java:183)
    at org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor.processTimeouts(DefaultConnectingIOReactor.java:210)
    at org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor.processEvents(DefaultConnectingIOReactor.java:155)
    at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor.execute(AbstractMultiworkerIOReactor.java:348)
    at org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager.execute(PoolingNHttpClientConnectionManager.java:192)
    at org.apache.http.impl.nio.client.CloseableHttpAsyncClientBase$1.run(CloseableHttpAsyncClientBase.java:64)
    at java.lang.Thread.run(Unknown Source)

我越来越绝望,我真的不明白发生了什么,如果有人可以提供帮助将不胜感激!

感谢很多人

【问题讨论】:

  • 您是否将您的 elasticsearch.yml 文件中的 network.host 参数(参见 elastic.co/guide/en/elasticsearch/reference/current/…)从 local 更改为 ip?如果是这样,elasticsearch 进入“生产模式”并在启动前添加一些引导检查。您确定您的弹性集群运行良好吗?你能发布你的网络配置吗?
  • 感谢皮埃尔的帮助

标签: elasticsearch


【解决方案1】:

问题终于解决了,端口不是很好,使用服务器的人告诉我端口,因为他们改变了它,它直接工作;)

【讨论】:

    猜你喜欢
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 2013-03-20
    • 2020-07-03
    • 1970-01-01
    • 2020-11-14
    • 2015-06-17
    相关资源
    最近更新 更多