Java 数据 Elasticsearch 客户端将端口 9200 附加到 url
Java Data Elasticsearch client appending port 9200 to url
Spring 数据 Elasticsearch 版本:
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
<version>3.2.6.RELEASE</version>
</dependency>
我不明白为什么我的 Elasticsearch Highlevel 客户端总是强制端口为 9200
,即使我指定了端口 443
。
我是这样定义 RestHighLevelClient
:
@Slf4j
@Configuration
public class ElasticsearchConfiguration {
@Value("${elasticsearch.host:127.0.0.1}")
private String elasticsearchHost;
@Value("${elasticsearch.port:9200}")
private String elasticsearchPort;
@Bean(destroyMethod = "close")
public RestHighLevelClient client() throws IOException {
log.info("Creating High level rest client for Elasticsearch with host: " + elasticsearchHost);
ClientConfiguration configuration = ClientConfiguration.builder()
.connectedTo(elasticsearchHost + ":" + elasticsearchPort)
.usingSsl()
.build();
return RestClients.create(configuration).rest();
}
@Bean
public ElasticsearchRestTemplate getElasticsearchTemplate() throws IOException {
return new ElasticsearchRestTemplate(client());
}
}
以及我如何使用模板:
private ElasticsearchRestTemplate elasticsearchTemplate;
@Autowired
public ElasticsearchServiceImpl(@Qualifier("getElasticsearchTemplate") ElasticsearchRestTemplate elasticsearchRestTemplate) {
this.elasticsearchTemplate = elasticsearchRestTemplate;
}
@PostConstruct
public void init() throws IOException {
create indexes...
}
我已验证主机和端口都已在属性文件中设置:
--elasticsearch.host=https://vpc-example-ryphgjfwji3zonliyhhd3nu.eu-west-2.es.amazonaws.com
--elasticsearch.port=443
在我收到的堆栈跟踪错误中:Caused by: java.io.IOException: https://vpc-example-ryphgjfwji3zonliyhhd3nu.eu-west-2.es.amazonaws.com:443:9200
,似乎是将 9200
附加到 url 的末尾。为什么会这样?
我已确认通过 curl 连接成功。
编辑:添加了另一个堆栈跟踪
un 09 21:44:44 ip-10xxxx95.pre.xxx-prototype.xxx.uk bash[19738]: 2020-06-09 21:44:44.023 ERROR 19738 --- [ main] c.g.c.s.impl.ElasticsearchServiceImpl : https://vpc-example-ryphgjfwji3zonliyhhd3nu.eu-west-2.es.amazonaws.com: Name or service not known
Jun 09 21:44:44 ip-10-2xxxxx5.pre.xxx-prototype.xxx.uk bash[19738]: 2020-06-09 21:44:44.024 ERROR 19738 --- [ main] c.g.c.s.impl.ElasticsearchServiceImpl : [org.elasticsearch.client.RestClient$SyncResponseListener.get(RestClient.java:964), org.elasticsearch.client.RestClient.performRequest(RestClient.java:233), org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1764),
你能尝试像下面这样创建 resthighleval 客户端吗:
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
RestClient.builder(new HttpHost(configuration.getElasticsearchConfig().getHost(),
configuration.getElasticsearchConfig().getPort(),
"https")));
并使用以下配置,注意我将端口配置留空:
--elasticsearch.host=https://vpc-example-ryphgjfwji3zonliyhhd3nu.eu-west-2.es.amazonaws.com
--elasticsearch.port=
我过去创建了一个到 AWS ES 和托管在 AWS 中的 ES 的连接,如果您遇到代码问题,请告诉我,我们很乐意进一步提供帮助。
指定主机时不要指定协议(https)。在您的情况下,它将是:
--elasticsearch.host=vpc-example-ryphgjfwji3zonliyhhd3nu.eu-west-2.es.amazonaws.com
--elasticsearch.port=443
Spring 数据 Elasticsearch 版本:
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
<version>3.2.6.RELEASE</version>
</dependency>
我不明白为什么我的 Elasticsearch Highlevel 客户端总是强制端口为 9200
,即使我指定了端口 443
。
我是这样定义 RestHighLevelClient
:
@Slf4j
@Configuration
public class ElasticsearchConfiguration {
@Value("${elasticsearch.host:127.0.0.1}")
private String elasticsearchHost;
@Value("${elasticsearch.port:9200}")
private String elasticsearchPort;
@Bean(destroyMethod = "close")
public RestHighLevelClient client() throws IOException {
log.info("Creating High level rest client for Elasticsearch with host: " + elasticsearchHost);
ClientConfiguration configuration = ClientConfiguration.builder()
.connectedTo(elasticsearchHost + ":" + elasticsearchPort)
.usingSsl()
.build();
return RestClients.create(configuration).rest();
}
@Bean
public ElasticsearchRestTemplate getElasticsearchTemplate() throws IOException {
return new ElasticsearchRestTemplate(client());
}
}
以及我如何使用模板:
private ElasticsearchRestTemplate elasticsearchTemplate;
@Autowired
public ElasticsearchServiceImpl(@Qualifier("getElasticsearchTemplate") ElasticsearchRestTemplate elasticsearchRestTemplate) {
this.elasticsearchTemplate = elasticsearchRestTemplate;
}
@PostConstruct
public void init() throws IOException {
create indexes...
}
我已验证主机和端口都已在属性文件中设置:
--elasticsearch.host=https://vpc-example-ryphgjfwji3zonliyhhd3nu.eu-west-2.es.amazonaws.com
--elasticsearch.port=443
在我收到的堆栈跟踪错误中:Caused by: java.io.IOException: https://vpc-example-ryphgjfwji3zonliyhhd3nu.eu-west-2.es.amazonaws.com:443:9200
,似乎是将 9200
附加到 url 的末尾。为什么会这样?
我已确认通过 curl 连接成功。
编辑:添加了另一个堆栈跟踪
un 09 21:44:44 ip-10xxxx95.pre.xxx-prototype.xxx.uk bash[19738]: 2020-06-09 21:44:44.023 ERROR 19738 --- [ main] c.g.c.s.impl.ElasticsearchServiceImpl : https://vpc-example-ryphgjfwji3zonliyhhd3nu.eu-west-2.es.amazonaws.com: Name or service not known
Jun 09 21:44:44 ip-10-2xxxxx5.pre.xxx-prototype.xxx.uk bash[19738]: 2020-06-09 21:44:44.024 ERROR 19738 --- [ main] c.g.c.s.impl.ElasticsearchServiceImpl : [org.elasticsearch.client.RestClient$SyncResponseListener.get(RestClient.java:964), org.elasticsearch.client.RestClient.performRequest(RestClient.java:233), org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1764),
你能尝试像下面这样创建 resthighleval 客户端吗:
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
RestClient.builder(new HttpHost(configuration.getElasticsearchConfig().getHost(),
configuration.getElasticsearchConfig().getPort(),
"https")));
并使用以下配置,注意我将端口配置留空:
--elasticsearch.host=https://vpc-example-ryphgjfwji3zonliyhhd3nu.eu-west-2.es.amazonaws.com --elasticsearch.port=
我过去创建了一个到 AWS ES 和托管在 AWS 中的 ES 的连接,如果您遇到代码问题,请告诉我,我们很乐意进一步提供帮助。
指定主机时不要指定协议(https)。在您的情况下,它将是:
--elasticsearch.host=vpc-example-ryphgjfwji3zonliyhhd3nu.eu-west-2.es.amazonaws.com
--elasticsearch.port=443