【发布时间】: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