首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Springboot弹性搜索健康管理: ConnectException:拒绝连接

Springboot弹性搜索健康管理: ConnectException:拒绝连接
EN

Stack Overflow用户
提问于 2019-01-25 10:23:45
回答 3查看 9.8K关注 0票数 9

在我的春季yaml文件中:

代码语言:javascript
复制
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。

有人知道我做错了什么吗?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-13 13:19:38

Spring引导elasticsearch需要知道连接到哪个端口(和主机)进行健康检查。添加:

代码语言:javascript
复制
spring:
  elasticsearch:
    rest:
      uris: "myelasticserver:9200"
      #username: ""
      #password: ""

这是对您已经拥有的配置的补充。这是独立的,因为许多人,像我一样,使用elasticsearch的(非http)端口9300来进行实际的搜索,而不是使用您的配置部分。我也没有management.health.elasticsearch。我对elasticsearch的总体配置是:

代码语言:javascript
复制
spring:
  elasticsearch:
    rest:
      uris: "myelasticserver:9200"
  data:
    elasticsearch:
      cluster-nodes: "myelasticserver:9300"
      cluster-name: "my-cluster-name"
票数 10
EN

Stack Overflow用户

发布于 2019-03-11 10:12:23

问题确实是,正如mst所提到的,执行器使用RestClient。如果您已配置了RestHighLevelClient,则该配置不会应用于RestClient

如果您已经拥有了可用的RestHighLevelClient,您可以很容易地使配置的RestClient可用,如下所示:

代码语言:javascript
复制
    @Bean(destroyMethod = "close")
    public RestClient restClient() {
        return restHighLevelClient().getLowLevelClient();
    }
票数 8
EN

Stack Overflow用户

发布于 2019-01-31 02:21:27

我也遇到了同样的问题,我想出了什么问题。对于健康检查,java spring引导使用RestClient,其中我使用HighLevelRestClient进行ES索引/搜索/删除。

因此,您似乎也有相同的情况,无论您是使用高或低(或tcp)级别的客户端进行ES查询,但健康检查需要RestClient。因此,解决方案是使用env覆盖RestClient bean。在配置文件中添加以下内容(用您的环境值替换环境值):

代码语言:javascript
复制
@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)您的配置,如果这不工作。祝好运!

参考文献

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54363302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档