通俗易懂的 Dubbo 教程(六) 多版本

2021-10-05 12:00:33 字數 1778 閱讀 6763

當乙個介面的實現出現不相容公升級時,我們可以用版本號過渡,版本號不同的服務相互間不引用。

那麼我們應該如何進行版本遷移呢?我們可以採取以下步驟:

在低壓力時間段,先公升級一半提供者為新版本

再將所有消費者公升級為新版本

然後將剩下的一半提供者公升級為新版本

我們可以利用 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 即軟體即服務。相信三者的區別網上的解釋數不勝數,然而或許因為和我們的...