1. 程式人生 > >開發過程中dubbo 實體序列化問題

開發過程中dubbo 實體序列化問題

首先想到的是java為什麼要序列化?網上看到的一篇文章如下。

http://blog.csdn.net/wangloveall/article/details/7992448/

開發過程中的問題

  某個模組需求改變的時候,需要對之前已經序列化的實體新增欄位,並且通過dubbo服務呼叫返回實體的所有屬性(包括新新增的屬性欄位)。但是在dubbo服務端呼叫dubbo客戶端時,發現對於實體新增加的欄位,怎麼也沒有該屬性。這就是問題的所在。

解決過程

於是開始遠端斷點除錯,發現dubbo客戶端是有這個屬性的,但是服務端在呼叫的時候丟失了這個屬性。經過多次除錯,想到了java序列化和反序列化問題,對於dubbo的分散式實體,dubbo自己做的實體的序列化和反序列化,是不是這塊有問題呢?查詢網上的資料,有的這樣解釋dubbo的序列化和反序列化,http://blog.csdn.net/wanyanxgf/article/details/6944733。

據說解決方案如下

據同事說,之前也遇到過這樣的問題,解決方案有兩種:1 、修改實體的序列化號。2、升級該實體所在jar的版本號。但實際上,我試了試,把用到該dubbo服務的專案重新build後重啟了一下就可以了,奇怪了。但是任何用到該實體的dubbo client 沒有重新build,那用到該實體那個新增加的屬性就會有問題。

但是為了保險起見,也為了相容之前的版本可見,還是把當前分支的jar的版本號升級一下吧。

綜上:

下次直接把版本號升級,就再也不用遠端除錯好長時間了。

  (ps:後來又出現了這樣的問題,才發現: 兩套不同的測試環境使用同一套redis快取,更新了一套程式碼,而另一套沒有更新,當新增快取後,也會出現新增加的屬性沒有新增上的問題.)