ElasticSearch Rest High Level Client дает исключение UnknownHostException - PullRequest
0 голосов
/ 08 ноября 2019

Я пытался подключиться к кластеру эластичного поиска с помощью RestHighLevelClient, но, похоже, он не работает для меня. Ниже приведен фрагмент кода, который я использовал.

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);

    }

}

Я попытался использовать тот же набор имени хоста, порта и учетных данных (строка 64 "username: password" в кодировке Base 64) с cURL, и он соединяется, но каким-то образом программноэто дает мое UnknownHostException, что довольно странно, помощь приветствуется.

РЕДАКТИРОВАТЬ Я использую 9243, который работает с cURL, а также я пробовал 9200, 9300 на всякий случай, но безрезультатно.

1 Ответ

0 голосов
/ 08 ноября 2019

Одна маленькая, но важная поправка. При использовании настройки Elastic Search по умолчанию вы должны подключаться к порту 9200 .

Пожалуйста, ознакомьтесь с официальной документацией: https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-getting-started-initialization.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...