dubbo缺省協議參數及返回值需實現 Serializable 接口

官方文檔:

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調用,並沒有經過缺省協議的序列化流程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章