【问题标题】:ElasticSearch Rest High Level Client gives UnknownHostExceptionElasticSearch Rest 高级客户端给出 UnknownHostException
【发布时间】:2020-03-04 21:37:40
【问题描述】:

我试图使用 RestHighLevelClient 连接到我的 elasticsearch 集群,但它似乎不适合我。以下是我使用的代码sn-p。

import org.apache.http.Header;
import org.apache.http.HttpHeaders;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope; 
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.message.BasicHeader;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Base64;

@Configuration
public class ElasticSearchConfig {
    @Value("${elasticsearch.host}")
    private String host;

    @Value("${elasticsearch.port}")
    private int port;

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

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


    @Bean(destroyMethod = "close")
    public RestHighLevelClient esClient() {
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username,     password));

        System.out.println("header " +  Base64.getEncoder().encodeToString((username + ":" + password).getBytes()));
        String encodedBytes = Base64.getEncoder().encodeToString((username + ":" + password).getBytes());
        RestClientBuilder builder = RestClient.builder(new HttpHost(host, 9243,"https"));
    /*Header[] headers = {new BasicHeader(HttpHeaders.CONTENT_TYPE, "application/json"),
            new BasicHeader("Authorization", "Basic " + encodedBytes)};
    */
        builder.setHttpClientConfigCallback(
            httpClientBuilder ->     httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider));
    //builder.setDefaultHeaders(headers);
        System.out.println("password" +     credentialsProvider.getCredentials(AuthScope.ANY).getPassword());
    System.out.println("name" +     credentialsProvider.getCredentials(AuthScope.ANY).getUserPrincipal().getName());
    return new RestHighLevelClient(builder);

    }

}

我尝试使用与 cURL 相同的主机名、端口和凭据集(“用户名:密码”的 Base 64 编码字符串)并连接,但不知何故,它以编程方式给出了我的 UnknownHostException,这很奇怪,感谢帮助。

编辑 我正在使用与 cURL 一起使用的 9243,并且我尝试了 9200、9300 以防万一,但无济于事。

【问题讨论】:

  • 尝试使用 Http 连接而不是 https 看看有什么问题吗?
  • @dassum 还是不行
  • ES 在哪个端口上运行?为什么是443端口?共享您在属性文件中指定的示例 elasticsearch.host 值。更好地打印并验证您是否获得了正确的价值
  • 端口应该是 9300,然后使用 HTTP 连接。请在问题中提及弹性搜索连接属性。
  • @dassum 我的端口是 9243。

标签: elasticsearch elasticsearch-java-api unknown-host


【解决方案1】:

一个小而重要的更正。使用 Elastic Search 的默认设置时,您应该连接到端口 9200。

请阅读官方文档:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-getting-started-initialization.html

【讨论】:

  • 对我来说是 9243,这是我在阅读了一个 elastic.co 问题线程后才尝试的。所以端口 9243 正在使用 cURL 为我工作。但是java客户端的问题依然存在。
  • 你能安装/测试 Chrome ElasticSearch Head 插件吗?它允许连接到 ES 并支持浏览您的索引。您必须验证的另一件事是 pom.xml 中 org.elasticsearch 依赖项的版本。您必须确保此版本与您尝试连接的 ES 版本兼容。
  • Deepesh,另一方面,你得到一个 UnknownHostException 所以你完全确信你的主机名是正确的吗?记录您的 Java-host-value 并与您结合 curl 使用的值进行比较。
  • 是的,如果它们不正确,为什么我的 cURL 命令会起作用?我能够创建一个索引,将数据放入其中。但这只是导致问题的 java 客户端。
猜你喜欢
  • 1970-01-01
  • 2020-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-19
  • 1970-01-01
  • 1970-01-01
  • 2020-08-30
相关资源
最近更新 更多