dubbo缺省协议参数及返回值需实现 Serializable 接口

本文围绕Dubbo展开,介绍其缺省协议使用基于mina和hessian的tbremoting交互。阐述了参数及返回值的约束,如需实现特定接口,使用Hessian序列化的特点。还提到RPC调用中未实现接口会报错,以及项目服务拆分未单独部署时的特殊情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官方文档:

http://dubbo.apache.org/zh-cn/docs/user/references/protocol/dubbo.htm

缺省协议,使用基于 mina 1.1.7 和 hessian 3.2.1 的 tbremoting 交互。

 

约束

  • 参数及返回值需实现 Serializable 接口
  • 参数及返回值不能自定义实现 ListMapNumberDateCalendar 等接口,只能用 JDK 自带的实现,因为 hessian 会做特殊处理,自定义实现类中的属性值都会丢失。
  • Hessian 序列化,只传成员属性值和值的类型,不传方法或静态变量,兼容情况 [1][2]

如果RPC调用参数及返回值没有实现Serializable 接口会报异常:

Serialized class com.xxx.WaresBasicDO must implement java.io.Serializable
java.lang.IllegalStateException: Serialized class com.souche.mall.product.domain.WaresBasicDO 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.dubbo.common.serialize.hessian2.Hessian2ObjectOutput.writeObject(Hessian2ObjectOutput.java:88)

     我所在的项目进行项目的服务拆分,但是没有把各个服务模块单独部署,各服务模块dubbo的service API实际还是在同一个Spring容器中运行的,这个时候返回值没有实现Serializable 接口也没有报错,因为这实际上并不是RPC调用,并没有经过缺省协议的序列化流程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值