项目场景:
最近通过b站视频在学习dubbo(特别声明:b站真是个学习的地方,b站快打钱),用dubbo做了一个小demo(案例)
开发环境:Mac、IDEA
问题描述:
错误提示如下:意思是不能够调用这个方法,大家注意看我绿色箭头标注的那行错误提示…
Exception in thread "main" com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method getUserAddressList in the service com.gy.service.UserService. Tried 3 times of the providers [192.168.59.129:8083] (1/1) from the registry zoo1.superboss.cc:30002 on the consumer 192.168.59.129 using the dubbo version 2.6.2. Last error is: Failed to invoke remote method: getUserAddressList, provider: dubbo://192.168.59.129:8083/com.gy.service.UserService?anyhost=true&application=consumer-service-consumer&check=false&dubbo=2.6.2&generic=false&interface=com.gy.service.UserService&methods=getUserAddressList&pid=2150®ister.ip=192.168.59.129&remote.timestamp=1603958286554&revision=1.0-SNAPSHOT&side=consumer×tamp=1603958793263&version=1.0.0-ccc, cause: Failed to send response: Response [id=2, version=2.0.0, status=20, event=false, error=null, result=RpcResult [result=[com.gy.bean.UserAddress@7a2f0b78, com.gy.bean.UserAddress@7e1080e5], exception=null]], cause: java.lang.IllegalStateException: Serialized class com.gy.bean.UserAddress must implement java.io.Serializable
java.lang.IllegalStateException: Serialized class com.gy.bean.UserAddress must implement java.io.Serializable
at com.alibaba.com.caucho.hessian.io.SerializerFactory.getDefaultSerializer(SerializerFactory.java:395)
at com.alibaba.com.caucho.hessian.io.SerializerFactory.getSerializer(SerializerFactory.java:369)
at com.alibaba.com.caucho.hessian.io.Hessian2Output.writeObject(Hessian2Output.java:389)
at com.alibaba.com.caucho.hessian.io.CollectionSerializer.writeObject(CollectionSerializer.java:99)
at com.alibaba.com.caucho.hessian.io.Hessian2Output.writeObject(Hessian2Output.java:391)
at com.alibaba.dubbo.common.serialize.hessian2.Hessian2ObjectOutput.writeObject(Hessian2ObjectOutput.java:88)
at com.alibaba.dubbo.rpc.protocol.dubbo.DubboCodec.encodeResponseData(DubboCodec.java:192)
at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.encodeResponse(ExchangeCodec.java:277)
at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.encode(ExchangeCodec.java:73)
at com.alibaba.dubbo.rpc.protocol.dubbo.DubboCountCodec.encode(DubboCountCodec.java:38)
at com.alibaba.dubbo.remoting.transport.netty.NettyCodecAdapter$InternalEncoder.encode(NettyCodecAdapter.java:80)
at org.jboss.netty.handler.codec.oneone.OneToOneEncoder.handleDownstream(OneToOneEncoder.java:66)
at org.jboss.netty.channel.DefaultChannelPipeline.sendDownstream(DefaultChannelPipeline.java:591)
at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendDownstream(DefaultChannelPipeline.java:776)
at org.jboss.netty.channel.SimpleChannelHandler.writeRequested(SimpleChannelHandler.java:304)
at com.alibaba.dubbo.remoting.transport.netty.NettyHandler.writeRequested(NettyHandler.java:98)
at org.jboss.netty.channel.SimpleChannelHandler.handleDownstream(SimpleChannelHandler.java:266)
...
原因分析:
在使用dubbo生产和消费的过程中,我们所用到的Java Bean一定要序列化,不然会报以上的问题
解决方案:
解决方法很简单,搜索UserAddress这个Java Bean ,让他继承Serializable并完成序列化操作。
public class UserAddress implements Serializable {
private static final long serialVersionUID = -3560426973584607769L;
这里需要注意
的是:在完成序列化操作后,我们要重新编译代码,如我是maven的项目,需要重新install发布到本地仓库,然后在消费者的pom依赖中重新导入(即加入了依赖)
将public-project 公共的Java Bean的项目依赖导入到提供者和消费者的pom依赖中,导入完毕最好重新编译一下maven项目
这样,当我们再重新启动提供者和消费者的项目,就可以在消费者项目中使用方法读取到数据啦,当然我们也可以在dubbo-admin(dubbo的管理控制台中看到提供者与消费者),dubbo-admin这个项目我也发布在博客中啦,大家可以点这里👉下载
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/13677.html