微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

即使 Elasticsearch 服务器正在运行,使用 ReactiveElasticsearchClient 的 Spring 应用程序也会无限期地卡住

如何解决即使 Elasticsearch 服务器正在运行,使用 ReactiveElasticsearchClient 的 Spring 应用程序也会无限期地卡住

我一直在尝试使用 ReactiveElasticsearchClient 来索引我的 spring 应用程序中的一些文档。当我尝试使用命令 java -jar reactive-es-1.0-SNAPSHOT.jar application.ReactiveEsApplication

运行 jar 时,我的应用程序无限期地卡住

这里是 pom.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.5.RELEASE</version>
        <relativePath/>
    </parent>
    <groupId>com.example</groupId>
    <artifactId>reactive-es</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <java.version>1.8</java.version>
    </properties>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <configuration>
                            <mainClass>application.ReactiveEsApplication</mainClass>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>


        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>


        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-elasticsearch</artifactId>
            <version>4.1.8</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webflux</artifactId>
            <version>5.3.6</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
            <version>2.4.5</version>
        </dependency>

        <dependency>
            <groupId>io.projectreactor</groupId>
            <artifactId>reactor-core</artifactId>
            <version>3.4.5</version>
        </dependency>

        <dependency>
            <groupId>io.projectreactor.netty</groupId>
            <artifactId>reactor-netty</artifactId>
            <version>1.0.6</version>
        </dependency>
    </dependencies>

</project>

这里是 ESClientConfiguration 类

package application.utils;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.data.elasticsearch.client.ClientConfiguration;
import org.springframework.data.elasticsearch.client.reactive.ReactiveElasticsearchClient;
import org.springframework.data.elasticsearch.client.reactive.ReactiveRestClients;
import org.springframework.stereotype.Component;

@Component
public class ESClientConfiguration {

    @Value("${es.host}")
    private String host;

    @Bean
    public ReactiveElasticsearchClient getReactiveClient() {
        final ClientConfiguration clientConfiguration = ClientConfiguration.builder()
                .connectedTo(host)
                .build();
        return ReactiveRestClients.create(clientConfiguration);
    }
}

这是 ReactiveEsApplication 类

package application;

import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.common.xcontent.XContentType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.elasticsearch.client.reactive.ReactiveElasticsearchClient;

import java.util.HashMap;

@Slf4j
@SpringBootApplication
public class ReactiveEsApplication implements CommandLineRunner {
    private final ReactiveElasticsearchClient reactiveElasticsearchClient;

    @Autowired
    public ReactiveEsApplication(ReactiveElasticsearchClient reactiveElasticsearchClient) {
        this.reactiveElasticsearchClient = reactiveElasticsearchClient;
    }

    public static void main(String[] args) {
        SpringApplication.run(ReactiveEsApplication.class,args);
    }

    @Override
    public void run(String... args) throws Exception {
        System.out.println("============Started running============");
        try {
            System.out.println("============Started indexing============");
            insertDocument("my-index");
        } catch (Exception e) {
            log.error("Error!",e);
        }
    }

    public void insertDocument(final String indexName) {

        IndexRequest indexRequest = new IndexRequest(indexName);
        indexRequest.source(getDocument(),XContentType.JSON);
        reactiveElasticsearchClient
                .index(indexRequest)
                .subscribe(System.out::println,System.out::println,() -> System.out.println("completed"));
    }

    private HashMap<String,String> getDocument() {
        return new HashMap<String,String>() {{
            put("name","maria");
            put("age","29");
            put("experience","7");
        }};
    }
}

这是 application.properties

es.host=10.47.20.112:9200

当我运行命令 java -jar reactive-es-1.0-SNAPSHOT.jar application.ReactiveEsApplication 时,应用程序卡住了,这是控制台日志


  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__,| / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.3.5.RELEASE)

2021-04-30 17:51:33.244  INFO 16868 --- [           main] a.ReactiveEsApplication                  : Starting ReactiveEsApplication v1.0-SNAPSHOT on ip-172-31-46-44 with PID 16868 (/home/user/reactive-es-1.0-SNAPSHOT.jar started by user in /home/user)
2021-04-30 17:51:33.249  INFO 16868 --- [           main] a.ReactiveEsApplication                  : No active profile set,falling back to default profiles: default
2021-04-30 17:51:33.838  INFO 16868 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Elasticsearch repositories in DEFAULT mode.
2021-04-30 17:51:33.855  INFO 16868 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 13ms. Found 0 Elasticsearch repository interfaces.
2021-04-30 17:51:33.860  INFO 16868 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Reactive Elasticsearch repositories in DEFAULT mode.
2021-04-30 17:51:33.862  INFO 16868 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 1ms. Found 0 Reactive Elasticsearch repository interfaces.
2021-04-30 17:51:34.808  WARN 16868 --- [           main] o.s.d.c.CustomConversions                : Registering converter from class org.springframework.data.geo.Point to interface java.util.Map as writing converter although it doesn't convert to a store-supported type! You might want to check your annotation setup at the converter implementation.
2021-04-30 17:51:34.809  WARN 16868 --- [           main] o.s.d.c.CustomConversions                : Registering converter from interface java.util.Map to class org.springframework.data.geo.Point as reading converter although it doesn't convert from a store-supported type! You might want to check your annotation setup at the converter implementation.
2021-04-30 17:51:34.809  WARN 16868 --- [           main] o.s.d.c.CustomConversions                : Registering converter from class org.springframework.data.elasticsearch.core.geo.GeoPoint to interface java.util.Map as writing converter although it doesn't convert to a store-supported type! You might want to check your annotation setup at the converter implementation.
2021-04-30 17:51:34.809  WARN 16868 --- [           main] o.s.d.c.CustomConversions                : Registering converter from interface java.util.Map to class org.springframework.data.elasticsearch.core.geo.GeoPoint as reading converter although it doesn't convert from a store-supported type! You might want to check your annotation setup at the converter implementation.
2021-04-30 17:51:34.809  WARN 16868 --- [           main] o.s.d.c.CustomConversions                : Registering converter from interface org.springframework.data.elasticsearch.core.geo.GeoJson to interface java.util.Map as writing converter although it doesn't convert to a store-supported type! You might want to check your annotation setup at the converter implementation.
2021-04-30 17:51:34.809  WARN 16868 --- [           main] o.s.d.c.CustomConversions                : Registering converter from interface java.util.Map to interface org.springframework.data.elasticsearch.core.geo.GeoJson as reading converter although it doesn't convert from a store-supported type! You might want to check your annotation setup at the converter implementation.
2021-04-30 17:51:34.810  WARN 16868 --- [           main] o.s.d.c.CustomConversions                : Registering converter from class org.springframework.data.elasticsearch.core.geo.GeoJsonPoint to interface java.util.Map as writing converter although it doesn't convert to a store-supported type! You might want to check your annotation setup at the converter implementation.
2021-04-30 17:51:34.810  WARN 16868 --- [           main] o.s.d.c.CustomConversions                : Registering converter from interface java.util.Map to class org.springframework.data.elasticsearch.core.geo.GeoJsonPoint as reading converter although it doesn't convert from a store-supported type! You might want to check your annotation setup at the converter implementation.
2021-04-30 17:51:34.810  WARN 16868 --- [           main] o.s.d.c.CustomConversions                : Registering converter from class org.springframework.data.elasticsearch.core.geo.GeoJsonMultiPoint to interface java.util.Map as writing converter although it doesn't convert to a store-supported type! You might want to check your annotation setup at the converter implementation.
2021-04-30 17:51:34.810  WARN 16868 --- [           main] o.s.d.c.CustomConversions                : Registering converter from interface java.util.Map to class org.springframework.data.elasticsearch.core.geo.GeoJsonMultiPoint as reading converter although it doesn't convert from a store-supported type! You might want to check your annotation setup at the converter implementation.
2021-04-30 17:51:34.810  WARN 16868 --- [           main] o.s.d.c.CustomConversions                : Registering converter from class org.springframework.data.elasticsearch.core.geo.GeoJsonLinestring to interface java.util.Map as writing converter although it doesn't convert to a store-supported type! You might want to check your annotation setup at the converter implementation.
2021-04-30 17:51:34.811  WARN 16868 --- [           main] o.s.d.c.CustomConversions                : Registering converter from interface java.util.Map to class org.springframework.data.elasticsearch.core.geo.GeoJsonLinestring as reading converter although it doesn't convert from a store-supported type! You might want to check your annotation setup at the converter implementation.
2021-04-30 17:51:34.811  WARN 16868 --- [           main] o.s.d.c.CustomConversions                : Registering converter from class org.springframework.data.elasticsearch.core.geo.GeoJsonMultiLinestring to interface java.util.Map as writing converter although it doesn't convert to a store-supported type! You might want to check your annotation setup at the converter implementation.
2021-04-30 17:51:34.811  WARN 16868 --- [           main] o.s.d.c.CustomConversions                : Registering converter from interface java.util.Map to class org.springframework.data.elasticsearch.core.geo.GeoJsonMultiLinestring as reading converter although it doesn't convert from a store-supported type! You might want to check your annotation setup at the converter implementation.
2021-04-30 17:51:34.811  WARN 16868 --- [           main] o.s.d.c.CustomConversions                : Registering converter from class org.springframework.data.elasticsearch.core.geo.GeoJsonpolygon to interface java.util.Map as writing converter although it doesn't convert to a store-supported type! You might want to check your annotation setup at the converter implementation.
2021-04-30 17:51:34.811  WARN 16868 --- [           main] o.s.d.c.CustomConversions                : Registering converter from interface java.util.Map to class org.springframework.data.elasticsearch.core.geo.GeoJsonpolygon as reading converter although it doesn't convert from a store-supported type! You might want to check your annotation setup at the converter implementation.
2021-04-30 17:51:34.812  WARN 16868 --- [           main] o.s.d.c.CustomConversions                : Registering converter from class org.springframework.data.elasticsearch.core.geo.GeoJsonMultipolygon to interface java.util.Map as writing converter although it doesn't convert to a store-supported type! You might want to check your annotation setup at the converter implementation.
2021-04-30 17:51:34.812  WARN 16868 --- [           main] o.s.d.c.CustomConversions                : Registering converter from interface java.util.Map to class org.springframework.data.elasticsearch.core.geo.GeoJsonMultipolygon as reading converter although it doesn't convert from a store-supported type! You might want to check your annotation setup at the converter implementation.
2021-04-30 17:51:34.812  WARN 16868 --- [           main] o.s.d.c.CustomConversions                : Registering converter from class org.springframework.data.elasticsearch.core.geo.GeoJsonGeometryCollection to interface java.util.Map as writing converter although it doesn't convert to a store-supported type! You might want to check your annotation setup at the converter implementation.
2021-04-30 17:51:34.812  WARN 16868 --- [           main] o.s.d.c.CustomConversions                : Registering converter from interface java.util.Map to class org.springframework.data.elasticsearch.core.geo.GeoJsonGeometryCollection as reading converter although it doesn't convert from a store-supported type! You might want to check your annotation setup at the converter implementation.
2021-04-30 17:51:34.883  INFO 16868 --- [           main] o.s.d.e.s.VersionInfo                    : Version Spring Data Elasticsearch: 4.1.8
2021-04-30 17:51:34.883  INFO 16868 --- [           main] o.s.d.e.s.VersionInfo                    : Version Elasticsearch Client in build: 7.9.3
2021-04-30 17:51:34.883  INFO 16868 --- [           main] o.s.d.e.s.VersionInfo                    : Version Elasticsearch Client used: 7.6.2
2021-04-30 17:51:34.884  WARN 16868 --- [           main] o.s.d.e.s.VersionInfo                    : Version mismatch in between Elasticsearch Clients build/use: 7.9.3 - 7.6.2
2021-04-30 17:51:35.476  INFO 16868 --- [           main] a.ReactiveEsApplication                  : Started ReactiveEsApplication in 2.679 seconds (JVM running for 3.448)
============Started running============
============Started indexing============

代码没有超出这个范围并卡在这里

我确认elasticsearch服务器是否在10.47.20.112上工作;它正在工作。这是对http://10.47.20.112:9200/my-index/_search?pretty=true&q=*:*

的回应
{
  "took" : 3,"timed_out" : false,"_shards" : {
    "total" : 1,"successful" : 1,"skipped" : 0,"Failed" : 0
  },"hits" : {
    "total" : {
      "value" : 1,"relation" : "eq"
    },"max_score" : 1.0,"hits" : [
      {
        "_index" : "my-index","_type" : "_doc","_id" : "JXBYInkBorO7pC2lkzAR","_score" : 1.0,"_source" : {
          "age" : 32,"experience" : 10,"name" : "john"
        }
      }
    ]
  }
}

解决方法

问题在于您混合了不匹配且无法协同工作的库版本。

您将父级定义为 Spring Boot 2.3.5,该版本使用 Spring 5.2,但后来将 webflux 版本定义为 5.3.6。 Spring Data Elasticsearch 4.1.8 版也是使用 Spring 5.3.2 构建的。我没有详细检查 recactor 和 netty 版本,但也可能存在一些冲突-似乎在您的 pom 中,您使用 Spring Boot 2.4.5 中的版本定义了这些依赖项,但将父版本保留在 2.3.5 .

您的应用程序使用以下 pom 运行(我将父级设置为 2.4.5 并删除了不需要的显式依赖项):

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.5</version>
        <relativePath/>
    </parent>
    <groupId>com.example</groupId>
    <artifactId>reactive-es</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <java.version>1.8</java.version>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <configuration>
                            <mainClass>application.ReactiveEsApplication</mainClass>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-elasticsearch</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>

    </dependencies>

</project>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。