【原】Dubbo 多版本號過渡

   以前發過一篇由於接口規範的問題致使其它端出現服務不可用的文章(http://www.cnblogs.com/zdd-java/p/8612763.html),然而最近在查閱了dubbo官方指南文檔才知道其實能夠經過多版本號解決前面那個問題,通過本身在本地測試後總結以下。


 

官方原內容以下:

 當一個接口實現,出現不兼容升級時,能夠用版本號過渡,版本號不一樣的服務相互間不引用。html

能夠按照如下的步驟進行版本遷移:java

  1. 在低壓力時間段,先升級一半提供者爲新版本
  2. 再將全部消費者升級爲新版本
  3. 而後將剩下的一半提供者升級爲新版本

 

 

老版本服務提供者配置:

<dubbo:service interface="com.foo.BarService" version="1.0.0" />

新版本服務提供者配置:

<dubbo:service interface="com.foo.BarService" version="2.0.0" />

老版本服務消費者配置:

<dubbo:reference id="barService" interface="com.foo.BarService" version="1.0.0" />

新版本服務消費者配置:

<dubbo:reference id="barService" interface="com.foo.BarService" version="2.0.0" />

若是不須要區分版本,能夠按照如下的方式配置 1:

<dubbo:reference id="barService" interface="com.foo.BarService" version="*" />

 


 

驗證過程:

  #啓動2個服務提供者分別爲s1,s2,這2個服務都註冊到本地的zk上。其中s1保留舊版本也就是 1.0,s2是升級後的版本也就是 2.0。

s2服務

 #2.0版本返回的類型是String。測試

 

 


 

s1服務

 

 #1.0版本仍是返回的類型是boolean。spa

 

當上面2個服務都成功啓動後開始從消費方發起對不一樣版本的模擬調用。3d

調用方:

   #先從1.0版本開始調用,因爲提供方1.0版本所提供的接口中返回的基本數據類型是boolean,因此進行測試後能正常響應。

 

 #以下圖所示,故意把消費者這邊版本升級到2.0,在啓動消費者的時候會訂閱2.0版本的服務, 但因爲2.0版本返回的是String,因此測試的時候會報類型錯誤。

 

 #錯誤以下

 

 總結:

   當須要升級接口版本的時候考慮到其它消費者沒來得及升級的狀況下須要兼容共存,這時候就能夠將一半的提供方服務升級一個版本過渡,例如雙節點,先部署一個升級版本後的服務上去。同理須要調用這個服務的消費者也同樣升級對應的版本,其它消費者依舊採用舊版本。

相關文章
相關標籤/搜索