官方文檔:
http://dubbo.apache.org/zh-cn/docs/user/references/protocol/dubbo.htm
缺省協議,使用基於 mina 1.1.7
和 hessian 3.2.1
的 tbremoting 交互。
約束
- 參數及返回值需實現
Serializable
接口 - 參數及返回值不能自定義實現
List
,Map
,Number
,Date
,Calendar
等接口,只能用 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調用,並沒有經過缺省協議的序列化流程。