記一次netty版本衝突,報java.lang.NoSuchMethodError: io.netty.util.internal.ObjectUtil.checkPositive的問題

來源:互聯網
上載者:User

標籤:elastics   ready   port   應該   ror   沒有   client   eth   util   

elasticsearch 5.6中使用TransportClient初始化拋異常

在引入elasticsearch5.6的transportclient包中,會引入netty進行通訊。

<!-- transport用戶端 --><dependency><groupId>org.elasticsearch.client</groupId><artifactId>transport</artifactId><version>5.6.1</version><exclusions><exclusion><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion></exclusions></dependency>

由於項目中會用到rocketmq,rocketmq也會內建有netty

<dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-client</artifactId><version>4.0.0-incubating</version></dependency>

用jetty啟動沒問題,但用tomcat報錯:java.lang.NoSuchMethodError: io.netty.util.internal.ObjectUtil.checkPositive

看來tomcat處理包衝突沒有jetty好

可以在項目pom檔案所在目錄,通過mvn dependency:tree 命令,查看包之間的依賴,通過查看包中的方法,發現rocketmq內建的netty包確實沒有此方法,es中的nettty版本

低於rocketmq中的netty版本。

注意:mvn dependency:tree -Dverbose -Dincludes=asm:asm 類似的命令可以找到重複的jar包引用

 

解決辦法:

1.在pom中直接引用netty4.13

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

經過引入上面的jar,衝突解決。

2.在初始化transportClient方法前添加

// 設定環境變數,解決Es的netty與Netty服務本身不相容問題
System.setProperty("es.set.netty.runtime.available.processors", "false");

第二種方法沒試,但應該行的通。

 

以上是問題和解決方案。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 ps:後來在初始化transportClient過程中,報錯:

java.lang.IllegalStateException: availableProcessors is already set to [4], rejecting [4]

java.lang.IllegalStateException: availableProcessors is already set to [4], rejecting [4]
at io.netty.util.NettyRuntime$AvailableProcessorsHolder.setAvailableProcessors(NettyRuntime.java:51)
at io.netty.util.NettyRuntime.setAvailableProcessors(NettyRuntime.java:87)
at org.elasticsearch.transport.netty4.Netty4Utils.setAvailableProcessors(Netty4Utils.java:87)
at org.elasticsearch.transport.netty4.Netty4Transport.<init>(Netty4Transport.java:115)
at org.elasticsearch.transport.Netty4Plugin.lambda$getTransports$0(Netty4Plugin.java:84)
at org.elasticsearch.client.transport.TransportClient.buildTemplate(TransportClient.java:176)
at org.elasticsearch.client.transport.TransportClient.<init>(TransportClient.java:262)
at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:128)

 

解決辦法:

在初始化之前加上System.setProperty("es.set.netty.runtime.available.processors", "false");

最後問題解決。

記一次netty版本衝突,報java.lang.NoSuchMethodError: io.netty.util.internal.ObjectUtil.checkPositive的問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.