【问题标题】:Connection refused with Elasticsearch test container even after adding wait即使添加了等待,Elasticsearch 测试容器的连接也被拒绝
【发布时间】:2022-01-15 04:52:16
【问题描述】:

我正在尝试移动应用程序以使用 Elasticsearch 容器编写测试。容器确实出现并检查其elasticsearchContainer.isRunning() 状态返回true,但在发出搜索请求时Connection Refused 抛出异常。从Spring boot, ElasticSearch and TestContainers integration tests. Connection refused 我添加了一个等待,但同样的问题仍然存在。

    private static final DockerImageName ELASTICSEARCH_IMAGE =
          DockerImageName.parse("docker.elastic.co/elasticsearch/elasticsearch").withTag("7.11.2");
    elasticsearchContainer = new ElasticsearchContainer(ELASTICSEARCH_IMAGE)
                  .withEnv("foo", "bar");
            elasticsearchContainer.addExposedPorts(9200, 9300);
            //elasticsearchContainer.withStartupTimeout(Duration.of(5, ChronoUnit.MINUTES));
            elasticsearchContainer.setWaitStrategy(
                  Wait.forHttp("/")
                        .forPort(9200)
                        .forStatusCode(200)
                        .withStartupTimeout(Duration.ofSeconds(300)));
            elasticsearchContainer.start();
            assert elasticsearchContainer.isRunning() == true;
            System.out.println("ES Get mapped port" + elasticsearchContainer.getMappedPort(9200)); // outputs a random 5 digit number
            try {
                SearchResponse response = getClient(elasticsearchContainer).search(new SearchRequest(), RequestOptions.DEFAULT); // ERRORS OUT HERE
                System.out.println(response);
            } catch (IOException e) {
                System.out.println("ERROR WHILE getting data " + e.getMessage());
            }

容器启动正常,日志中也没有错误:

CONTAINER ID   IMAGE                                                  COMMAND                  CREATED          STATUS          PORTS                                              NAMES
48b1cc29fea8   docker.elastic.co/elasticsearch/elasticsearch:7.11.2   "/bin/tini -- /usr/l…"   24 seconds ago   Up 23 seconds   0.0.0.0:64492->9200/tcp, 0.0.0.0:64493->9300/tcp   vigorous_banzai
d64503cd1a71   testcontainers/ryuk:0.3.3                              "/app"                   25 seconds ago   Up 24 seconds   0.0.0.0:64490->8080/tcp                            testcontainers-ryuk-bc01909a-5fcc-424e-8346-a7560c31c989

关于如何使连接工作的任何建议?

【问题讨论】:

    标签: elasticsearch testcontainers testcontainers-junit5


    【解决方案1】:

    意识到我正在使用硬编码端口来创建其余客户端。更改为并且有效

        private static RestHighLevelClient getRestHighLevelClient(ElasticsearchContainer container) {
            final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
            credentialsProvider.setCredentials(AuthScope.ANY,
                                               new UsernamePasswordCredentials(ELASTICSEARCH_USERNAME, ELASTICSEARCH_PASSWORD));
            RestClientBuilder restClientBuilder = RestClient.builder(HttpHost.create(container.getHttpHostAddress()))
                  .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder
                        .setDefaultCredentialsProvider(credentialsProvider)
            // Try to prevent SocketTimeoutException when fetching larger batch size
            restClientBuilder.setRequestConfigCallback(
                  requestConfigBuilder -> requestConfigBuilder.setSocketTimeout(2 * 60 * 1000));
    
            return new RestHighLevelClient(restClientBuilder);
        }
    

    【讨论】:

      猜你喜欢
      • 2017-08-30
      • 1970-01-01
      • 1970-01-01
      • 2019-10-20
      • 1970-01-01
      • 2020-09-08
      • 1970-01-01
      • 2018-12-02
      • 2021-04-12
      相关资源
      最近更新 更多