问题描述
使用pulsar3.0.1进行消息通信时,发现在idea编辑器能正常运行通信,打成jar包后一直收不到信息,打开debug日志后看到:
2025-07-31 09:08:19.930 DEBUG 56100 --- [r-client-io-1-3] o.a.p.s.io.netty.handler.ssl.OpenSsl : Failed to load netty-tcnative; OpenSslEngine will be unavailable, unless the application has already loaded the symbols by some other means. See https://netty.io/wiki/forked-tomcat-native.html for more information.
java.lang.IllegalArgumentException: Failed to load any of the given libraries: [netty_tcnative_windows_x86_64, netty_tcnative_x86_64, netty_tcnative]
at org.apache.pulsar.shade.io.netty.util.internal.NativeLibraryLoader.loadFirstAvailable(NativeLibraryLoader.java:114) ~[pulsar-client-3.0.1.jar!/:3.0.1]
at org.apache.pulsar.shade.io.netty.handler.ssl.OpenSsl.loadTcNative(OpenSsl.java:710) ~[pulsar-client-3.0.1.jar!/:3.0.1]
at org.apache.pulsar.shade.io.netty.handler.ssl.OpenSsl.<clinit>(OpenSsl.java:149) ~[pulsar-client-3.0.1.jar!/:3.0.1]
at org.apache.pulsar.shade.io.netty.handler.ssl.SslContext.defaultProvider(SslContext.java:125) [pulsar-client-3.0.1.jar!/:3.0.1]
at org.apache.pulsar.shade.io.netty.handler.ssl.SslContext.defaultClientProvider(SslContext.java:121) [pulsar-client-3.0.1.jar!/:3.0.1]
at org.apache.pulsar.shade.io.netty.handler.ssl.SslContext.newClientContextInternal(SslContext.java:818) [pulsar-client-3.0.1.jar!/:3.0.1]
at org.apache.pulsar.shade.io.netty.handler.ssl.SslContextBuilder.build(SslContextBuilder.java:615) [pulsar-client-3.0.1.jar!/:3.0.1]
at org.apache.pulsar.common.util.SecurityUtility.createNettySslContextForClient(SecurityUtility.java:308) [pulsar-client-3.0.1.jar!/:3.0.1]
at org.apache.pulsar.common.util.SecurityUtility.createNettySslContextForClient(SecurityUtility.java:292) [pulsar-client-3.0.1.jar!/:3.0.1]
at org.apache.pulsar.common.util.SecurityUtility.createNettySslContextForClient(SecurityUtility.java:274) [pulsar-client-3.0.1.jar!/:3.0.1]
at org.apache.pulsar.client.impl.PulsarChannelInitializer.lambda$new$0(PulsarChannelInitializer.java:127) [pulsar-client-3.0.1.jar!/:3.0.1]
at org.apache.pulsar.client.util.ObjectCache.get(ObjectCache.java:48) ~[pulsar-client-3.0.1.jar!/:3.0.1]
at org.apache.pulsar.client.impl.PulsarChannelInitializer.lambda$initTls$1(PulsarChannelInitializer.java:178) [pulsar-client-3.0.1.jar!/:3.0.1]
at org.apache.pulsar.shade.io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) ~[pulsar-client-3.0.1.jar!/:3.0.1]
at org.apache.pulsar.shade.io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) ~[pulsar-client-3.0.1.jar!/:3.0.1]
at org.apache.pulsar.shade.io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) ~[pulsar-client-3.0.1.jar!/:3.0.1]
at org.apache.pulsar.shade.io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) ~[pulsar-client-3.0.1.jar!/:3.0.1]
at org.apache.pulsar.shade.io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[pulsar-client-3.0.1.jar!/:3.0.1]
at org.apache.pulsar.shade.io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[pulsar-client-3.0.1.jar!/:3.0.1]
at org.apache.pulsar.shade.io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[pulsar-client-3.0.1.jar!/:3.0.1]
at java.lang.Thread.run(Unknown Source) ~[na:1.8.0_321]
Suppressed: java.lang.UnsatisfiedLinkError: could not load a native library: org_apache_pulsar_shade_netty_tcnative_windows_x86_64
at org.apache.pulsar.shade.io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:239) ~[pulsar-client-3.0.1.jar!/:3.0.1]
at org.apache.pulsar.shade.io.netty.util.internal.NativeLibraryLoader.loadFirstAvailable(NativeLibraryLoader.java:105) ~[pulsar-client-3.0.1.jar!/:3.0.1]
... 20 common frames omitted
Caused by: java.io.FileNotFoundException: META-INF/native/org_apache_pulsar_shade_netty_tcnative_windows_x86_64.dll
at org.apache.pulsar.shade.io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:186)
... 21 common frames omitted
Suppressed: java.lang.UnsatisfiedLinkError: no org_apache_pulsar_shade_netty_tcnative_windows_x86_64 in java.library.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at org.apache.pulsar.shade.io.netty.util.internal.NativeLibraryUtil.loadLibrary(NativeLibraryUtil.java:38)
at org.apache.pulsar.shade.io.netty.util.internal.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:396)
at org.apache.pulsar.shade.io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:161)
... 21 common frames omitted
Suppressed: java.lang.UnsatisfiedLinkError: no org_apache_pulsar_shade_netty_tcnative_windows_x86_64 in java.library.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at org.apache.pulsar.shade.io.netty.util.internal.NativeLibraryUtil.loadLibrary(NativeLibraryUtil.java:38)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.pulsar.shade.io.netty.util.internal.NativeLibraryLoader$1.run(NativeLibraryLoader.java:430)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.pulsar.shade.io.netty.util.internal.NativeLibraryLoader.loadLibraryByHelper(NativeLibraryLoader.java:422)
at org.apache.pulsar.shade.io.netty.util.internal.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:388)
... 22 common frames omitted
原因分析:
根据错误日志和搜索结果,Pulsar 客户端(如 pulsar-client-original:3.0.1)默认捆绑了特定版本的 netty-tcnative-boringssl-static(例如 2.0.31.Final)。若项目中其他组件(如 Spring Boot 或 Netty 核心库)引用了不同版本的 netty-tcnative(如 2.0.62.Final),会导致以下问题:
1.类加载冲突:JVM 在加载 SSL 相关类时可能因版本不一致抛出 NoSuchMethodError 或 ClassCastException。
2.本地库冲突:不同版本的 Native 库(如 .dll 或 .so)在运行时无法共存,引发 UnsatisfiedLinkError
解决方案:
排除 Pulsar 内置的 Netty-Tcnative就好
<dependency>
<groupId>org.apache.pulsar</groupId>
<artifactId>pulsar-client-original</artifactId>
<version>3.0.1</version>
<exclusions>
<!-- 排除 Pulsar 内置的旧版 Netty-Tcnative -->
<exclusion>
<groupId>io.netty</groupId>
<artifactId>netty-tcnative-boringssl-static</artifactId>
</exclusion>
</exclusions>
</dependency>
18

被折叠的 条评论
为什么被折叠?



