在我的春季yaml文件中:
spring:
application:
name: myApp
elasticsearch:
jest:
uris: ["http://myelasticserver:9200"]
multi-threaded: true
read-timeout: 10000
management:
health:
elasticsearch:
indices: ["one","two"]
response-timeout: 1000
enabled: true问题是,Jest客户端可以被注入和使用,没有任何问题。但不知何故,健康检查总是失败的,因为这个错误:
Elasticsearch健康检查失败java.net.ConnectException:连接被拒绝
似乎没有使用URL "http://myelasticserver:9200“,而健康检查使用localhost:9200。
有人知道我做错了什么吗?
谢谢。
发布于 2019-05-13 13:19:38
Spring引导elasticsearch需要知道连接到哪个端口(和主机)进行健康检查。添加:
spring:
elasticsearch:
rest:
uris: "myelasticserver:9200"
#username: ""
#password: ""这是对您已经拥有的配置的补充。这是独立的,因为许多人,像我一样,使用elasticsearch的(非http)端口9300来进行实际的搜索,而不是使用您的配置部分。我也没有management.health.elasticsearch。我对elasticsearch的总体配置是:
spring:
elasticsearch:
rest:
uris: "myelasticserver:9200"
data:
elasticsearch:
cluster-nodes: "myelasticserver:9300"
cluster-name: "my-cluster-name"发布于 2019-03-11 10:12:23
问题确实是,正如mst所提到的,执行器使用RestClient。如果您已配置了RestHighLevelClient,则该配置不会应用于RestClient。
如果您已经拥有了可用的RestHighLevelClient,您可以很容易地使配置的RestClient可用,如下所示:
@Bean(destroyMethod = "close")
public RestClient restClient() {
return restHighLevelClient().getLowLevelClient();
}发布于 2019-01-31 02:21:27
我也遇到了同样的问题,我想出了什么问题。对于健康检查,java spring引导使用RestClient,其中我使用HighLevelRestClient进行ES索引/搜索/删除。
因此,您似乎也有相同的情况,无论您是使用高或低(或tcp)级别的客户端进行ES查询,但健康检查需要RestClient。因此,解决方案是使用env覆盖RestClient bean。在配置文件中添加以下内容(用您的环境值替换环境值):
@Bean(destroyMethod = "close")
public RestClient restClient() {
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials(
environment.getProperty("elasticsearch.username"),
environment.getProperty("elasticsearch.password")));
List<HttpHost> hosts = new ArrayList<>();
hosts.add(new HttpHost(
environment.getProperty("elasticsearch.hosts.host.name", String.class),
environment.getProperty("elasticsearch.hosts.host.port", Integer.class),
"http"));
LOGGER.info("Elasticsearch connection establishing..." + hosts.toArray().toString());
return RestClient.builder(Iterables.toArray(hosts, HttpHost.class))
.setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider));
}让我看看(plz post)您的配置,如果这不工作。祝好运!
参考文献
https://stackoverflow.com/questions/54363302
复制相似问题