java 解决使用pulsar遇到打jar包后无法正常通信的问题

问题描述

使用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>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值