dubbo rpc調用,接收到的bean為null原因?


  前幾天對接公司內部其他部門的系統,用dubbo調用,dubbo看起來很簡單,但是卻讓我們調試了好久啊!

  下面是調試紀錄:

1. 調用該服務時,直接調不通,查看錯誤為 no provider ?

  然后就去查看該部門的服務是不是部署了最新的代碼,並重新打包部署。

  結果還是不行。然后去查看代碼,發現暴露該接口的配置部分,由於某種原因,被注釋掉了,哎呀,我去。

  將暴露該接口的配置打開,重新部署,總算可以在dubbo后台看到該服務了。

2. 再次調用該接口,結果報錯,不能進行序列化,即提示: no implements Serializable ?

  最后,終於確認,該段代碼是不可用的,未繼承 Serializable 的接口是不能被調用的。

  然后找相應同事改掉該代碼,繼承 Serializable 接口,總算可以調通了。

3. 報某字段數據類型非法 Date, java.lang.IllegalAgumentException ?

  java.sql.Date.getMinutes(Date.java: 194) 

  最后發現,是該類型將會導致實現端報錯,然后該同事再改代碼。

4. 我再次調用,然后不報錯了,但是我發現我的所有結果都沒有了,全部返回null.

  然后,該同事自己寫了單元測試用例,調用以后,證明該問題在他那里是不存在的。然后我蒙逼了。

5. 我也寫單元測試,直接調用他本地代碼,進行斷點調試,結果還是不行?

  弄了好久,實在干不動,就去請教高手指導一下。

  確認一下之后,說是沒有序列化,可能導致兩邊無法認為該bean是同一個實例;

  沒有使用相同的調用協議,結果證明是相同協議;高手也無解了。

6. 最后,該同事自己解決了該問題,原因為他將之前報錯的類型改掉了,但是我作為客戶端調用卻沒有同步更改,從而導致序列化結果不一致,從而解析為null.

  然后,他將該契約包上傳到私服,我從私服下載,重新單元測試調用,成功!!!

 

  雖說最后證明是一個簡簡單單的問題,但是中途也是很波折啊,記錄一下,權當學習了~  純文字版本,有點難讀,但是總體就兩個點: 是否序列化了? 是否服務端與客戶端使用了相同版本的契約包?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM