在我的春季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。
有人知道我在做什么错吗?
谢谢。
答案 0 :(得分:1)
确实,如前所述,问题确实在于执行器使用了RestClient
。如果已配置RestHighLevelClient
,则该配置不会应用于RestClient
。
如果您已有RestHighLevelClient
可用,则可以按如下所示轻松地使已配置的RestClient
可用:
@Bean(destroyMethod = "close")
public RestClient restClient() {
return restHighLevelClient().getLowLevelClient();
}
答案 1 :(得分:0)
我遇到了同样的问题,并且找出了问题所在。 为了进行健康检查,java春季启动使用RestClient,其中我使用HighLevelRestClient进行ES索引/搜索/删除。
因此,对于ES查询使用高级别还是低级别(或tcp)客户端,似乎您也遇到相同的情况,但是运行状况检查需要RestClient。 因此,解决方案是使用环境参数覆盖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));
}
如果这不起作用,请允许我查看(请发帖)您的配置。 祝你好运!
参考
答案 2 :(得分:0)
Spring boot 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"