dubbo反序列化问题 Unable to find class: path

9 篇文章 1 订阅

最近线上环境和测试环境总是时不时报找不到dubbo服务的错,或者是路径错误。

 

java.io.IOException: com.esotericsoftware.kryo.KryoException: Unable to find class: path

 at com.alibaba.dubbo.common.serialize.support.kryo.KryoObjectInput.readObject(KryoObjectInput.java:127)

 at com.alibaba.dubbo.common.serialize.support.kryo.KryoObjectInput.readObject(KryoObjectInput.java:140)

 at com.alibaba.dubbo.rpc.protocol.dubbo.DecodeableRpcInvocation.decode(DecodeableRpcInvocation.java:146)

 at com.alibaba.dubbo.rpc.protocol.dubbo.DecodeableRpcInvocation.decode(DecodeableRpcInvocation.java:74)

 at com.alibaba.dubbo.rpc.protocol.dubbo.DubboCodec.decodeBody(DubboCodec.java:138)

 at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:134)

 at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:95)

 at com.alibaba.dubbo.rpc.protocol.dubbo.DubboCountCodec.decode(DubboCountCodec.java:46)

 at com.alibaba.dubbo.remoting.transport.netty.NettyCodecAdapter$InternalDecoder.messageReceived(NettyCodecAdapter.java:134)

 at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)

 at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)

 at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)

 at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268)

 at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255)

 at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88)

 at org.jboss.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:108)

 at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:337)

 at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89)

 at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178)

 at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)

 at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42)

 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

 at java.lang.Thread.run(Thread.java:748)

Caused by: com.esotericsoftware.kryo.KryoException: Unable to find class: path

 at com.esotericsoftware.kryo.util.DefaultClassResolver.readName(DefaultClassResolver.java:138)

 at com.esotericsoftware.kryo.util.DefaultClassResolver.readClass(DefaultClassResolver.java:115)

 at com.esotericsoftware.kryo.Kryo.readClass(Kryo.java:641)

 at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:752)

 at com.alibaba.dubbo.common.serialize.support.kryo.KryoObjectInput.readObject(KryoObjectInput.java:125)

 ... 23 more

 

 

 

 

 

 

 

 

 

Failed to invoke the method setWxOpenId in the service com.pengji.linker.dubbox.services.modules.membermanager.service.interf.IWechatService. Tried 1 times of the providers [192.168.1.147:20883] (1/1) from the registry 10.10.111.187:2181 on the consumer 192.168.1.147 using the dubbo version 2.8.4. Last error is: Invoke remote method timeout. method: setWxOpenId, provider: dubbo://192.168.1.147:20883/com.pengji.linker.dubbox.services.modules.membermanager.service.interf.IWechatService?anyhost=true&application=linker-dubbox-bg&check=false&default.delay=-1&default.retries=0&default.timeout=6000&delay=-1&dubbo=2.8.4&generic=false&interface=com.pengji.linker.dubbox.services.modules.membermanager.service.interf.IWechatService&methods=getWxOpenId,getWxSubscribe,setWxOpenId,getShareConfig,getWxCodeUrl&organization=pengji&owner=summer&pid=15212&revision=0.0.1-SNAPSHOT&serialization=kryo&side=consumer&timestamp=1564456778614, cause: Waiting server-side response timeout. start time: 2019-07-30 11:27:20.027, end time: 2019-07-30 11:27:26.201, client elapsed: 116 ms, server elapsed: 6006 ms, timeout: 6000 ms, request: Request [id=2, version=2.0.0, twoway=true, event=false, broken=false, data=RpcInvocation [methodName=setWxOpenId, parameterTypes=[class com.pengji.linker.dubbox.services.modules.membermanager.entity.requestmodel.WxShareParamEntity], arguments=[com.pengji.linker.dubbox.services.modules.membermanager.entity.requestmodel.WxShareParamEntity@319431f7], attachments={path=com.pengji.linker.dubbox.services.modules.membermanager.service.interf.IWechatService, interface=com.pengji.linker.dubbox.services.modules.membermanager.service.interf.IWechatService, version=0.0.0, timeout=6000}]], channel: /192.168.1.147:54749 -> /192.168.1.147:20883

 

 

 

 

后来针对该问题,又将配置改为了dubbo默认序列化配置,才解决版本兼容问题。所以针对频繁变动的输入输出时,一般建议采用dubbo默认配置,虽然kryo速度快,但是还不够成熟,这也是dubbo默认配置是hession2而不是kryo。

 

 

 

 还有一个值得注意的问题:输入输出参数最好都实现Serializable接口,因为hession2要求必须实现Serializable接口,而kryo不作要求,所以为了方便切换,最好都按要求实现序列化接口

 

由于项目以前是使用kryo进行序列化的,遂将其改为hession2。

 

此次改动中还解决了问题:

dubbo调用发生StackOverflowError栈溢出异常.note

https://blog.csdn.net/rainbow_lasia/article/details/107185296  dubbo调用发生StackOverflowError栈溢出异常

记Dubbo调用Hessian序列化丢属性.note

https://blog.csdn.net/rainbow_lasia/article/details/107185335 记Dubbo调用Hessian序列化丢属性

dubbo使用hessian协议传输MultipartFile文件内容丟失.note

https://blog.csdn.net/rainbow_lasia/article/details/107185172 dubbo使用hessian协议传输MultipartFile文件内容丟失

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值