當乙個介面的實現出現不相容公升級時,我們可以用版本號過渡,版本號不同的服務相互間不引用。
那麼我們應該如何進行版本遷移呢?我們可以採取以下步驟:
在低壓力時間段,先公升級一半提供者為新版本
再將所有消費者公升級為新版本
然後將剩下的一半提供者公升級為新版本
我們可以利用 dubbo 的多版本實現灰度發布。
我們在服務提供者中為當前服務指定乙個版本號,例如在下面的例子中我們指定版本號為 1.0.0
package edu.szu.producer.serviceimpl;
import com.alibaba.dubbo.config.annotation.service;
import edu.szu.api.service.nameservice;
import org.springframework.stereotype.component;
@component
@service
(version =
"1.0.0"
)public
class
nameserviceimpl
implements
nameservice
}
現在業務進行了迭代,服務的實現也更新換代,在新服務中,我們將其版本號指定為 2.0.0
package edu.szu.producer.serviceimpl;
import com.alibaba.dubbo.config.annotation.service;
import edu.szu.api.service.nameservice;
import org.springframework.stereotype.component;
@component
@service
(version =
"2.0.0"
)public
class
nameserviceimpl2
implements
nameservice
}
在消費者中,我們可以指定使用提供者的哪乙個版本的服務,如果指定使用 1.0.0 版本就會使用 1.0.0 版本的服務,如果指定使用 2.0.0 版本就會使用 2.0.0 版本的服務,如果我們想隨機選擇服務的話可以在版本號的選擇中指定使用 *。
package edu.szu.consumer.serviceimpl;
import com.alibaba.dubbo.config.annotation.reference;
import edu.szu.api.service.nameservice;
import edu.szu.consumer.service.changeservice;
import org.springframework.stereotype.component;
@component
public
class
changeserviceimpl
implements
changeservice
}
我們進行幾次遠端呼叫,在控制台上檢視結果,發現結果如下:
可以發現,因為我們在消費者的版本控制中指定使用了 *,所以消費者既會呼叫 1.0.0 版本的服務,也會呼叫 2.0.0 版本的服務。
通俗易懂的 Dubbo 教程(四) 超時
有時遠端呼叫的服務執行時間太慢,消費端不想等待,這該怎麼辦?沒事,dubbo 給我們提供了乙個超時機制,超過指定的時間,直接返回乙個超時異常即可。下面我們來測試一下,在提供者中我們讓其睡眠兩秒再返回,消費者一切設定正常。component service public class nameservi...
通俗易懂的 Dubbo 教程(九) 服務降級
當伺服器壓力比較大的時候,我們可以通過服務降級,遮蔽掉一些非關鍵服務,給它們定義乙個降級後的返回策略,從而降低核心業務的壓力。通俗的說,服務降級就是在遠端呼叫失敗 例如超時 之後,直接採用降級措施,返回乙個我們已經定義好的提示。例如,在12306搶票高峰時,明明票還有,但查詢列表總是空的,過了高峰之...
IaaS PaaS和SaaS通俗易懂版
首先先給出三者的官方定義 iaas infrastructure as a service 即基礎設施即服務。paas platform as a service 即平台即服務。saas software as a service 即軟體即服務。相信三者的區別網上的解釋數不勝數,然而或許因為和我們的...