【问题标题】:java.lang.NoSuchMethodError Exception when I try to close ElasticSearch clientjava.lang.NoSuchMethodError 尝试关闭 ElasticSearch 客户端时出现异常
【发布时间】:2018-05-28 13:46:42
【问题描述】:

当我尝试使用 Java API 6.0 关闭 ElasticSearch 客户端时,我在 client.close() 调用中收到以下异常:

Exception in thread "elasticsearch[_client_][generic][T#1]" java.lang.NoSuchMethodError: io.netty.bootstrap.Bootstrap.config()Lio/netty/bootstrap/BootstrapConfig;
at org.elasticsearch.transport.netty4.Netty4Transport.lambda$stopInternal$7(Netty4Transport.java:390)
at org.apache.lucene.util.IOUtils.close(IOUtils.java:89)
at org.elasticsearch.common.lease.Releasables.close(Releasables.java:36)
at org.elasticsearch.common.lease.Releasables.close(Releasables.java:46)
at org.elasticsearch.common.lease.Releasables.close(Releasables.java:51)
at org.elasticsearch.transport.netty4.Netty4Transport.stopInternal(Netty4Transport.java:373)
at org.elasticsearch.transport.TcpTransport.lambda$doStop$14(TcpTransport.java:927)
at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:569)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

我使用的代码与 Java API 6.0 for ElasticSearch 的 documentation 中的示例完全相同:

        // on startup
    TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
            .addTransportAddress(new TransportAddress(InetAddress.getByName("localhost"), 9300));

    // on shutdown
    client.close();

【问题讨论】:

    标签: java elasticsearch elasticsearch-java-api


    【解决方案1】:

    NoSuchMethodError 表示您的依赖项存在问题。 Java API 6.0 文档指向这个 maven 依赖项:

    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>transport</artifactId>
        <version>6.0.0</version>
    </dependency>
    

    上述的一个传递依赖是:

    <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-transport</artifactId>
        <version>4.1.13.Final</version>
    </dependency>
    

    在版本 4.1.13.Final 中,类 io.netty.bootstrap.Bootstrap 有一个方法 config(),返回值 BootstrapConfig

    public final BootstrapConfig config()
      {
        return this.config;
      }
    

    请与mvn dependency:tree 确认您使用的是正确版本的io.netty:netty-transport

    【讨论】:

    • 在我的 pom.xml 文件中,我有以下依赖项:&lt;dependency&gt; &lt;groupId&gt;org.elasticsearch.client&lt;/groupId&gt; &lt;artifactId&gt;transport&lt;/artifactId&gt; &lt;version&gt;6.0.0&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;io.netty&lt;/groupId&gt; &lt;artifactId&gt;netty-transport&lt;/artifactId&gt; &lt;version&gt;4.1.13.Final&lt;/version&gt; &lt;/dependency&gt;
    • 根据 siom 的回答,您需要使用 mvn dependency:tree 并确切了解 maven 正在解决什么问题,而不仅仅是信任您配置的内容。
    【解决方案2】:

    我在使用 es 5.5.1 运行测试代码时遇到了同样的问题。我通过在下面添加 Maven 依赖项来解决它:

    io.netty netty-all 4.1.25.Final 测试

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-29
      相关资源
      最近更新 更多