背景信息
如果一個(gè)應(yīng)用有多個(gè)版本在線上同時(shí)運(yùn)行尘喝,部署在不同環(huán)境中絮短,如日常環(huán)境和特殊環(huán)境窘问,則
可以使用標(biāo)簽路由對(duì)不同環(huán)境中的不同版本進(jìn)行流量隔離臼婆,將秒殺訂單流量或不同渠道訂單流量路由到特殊環(huán)境,將正常的流量路由到日常環(huán)境恰起。即使特殊環(huán)境異常修械,本應(yīng)進(jìn)入特殊環(huán)境的流量也不會(huì)進(jìn)入日常環(huán)境,不影響日常環(huán)境的使用检盼。
啟動(dòng)運(yùn)行Dubbo-Admin
在運(yùn)行之前肯污,我們需要保障進(jìn)行運(yùn)行對(duì)應(yīng)的Dubbo-Admin服務(wù),可以參考 【Dubbo3終極特性】「流量治理體系」一文教你如何搭建Dubbo3的控制臺(tái)服務(wù)Dubbo-Admin吨枉,進(jìn)行搭建和運(yùn)行啟動(dòng)Dubbo-Admin服務(wù)蹦渣。
因?yàn)閐ubbo-admin-server會(huì)將dubbo-admin-ui打包為資源文件,所以啟動(dòng)dubbo-admin-server就可直接訪問(wèn)頁(yè)面了
我們?cè)谶@里可以直接下載clone源碼
git clone https://github.com/apache/dubbo-admin.git
直接可以下載到IDE中
- dubbo-admin-distribution:主要用于操作安裝和打包使用的項(xiàng)目組件
- dubbo-admin-server:dubbo-admin服務(wù)的后臺(tái)服務(wù)springboot類型的項(xiàng)目
- dubbo-admin-test:dubbo-admin服務(wù)的測(cè)試服務(wù)
- dubbo-admin-ui:dubbo-admin的ui服務(wù)貌亭,主要會(huì)顯示前端的ui頁(yè)面柬唯。
通過(guò)源碼打包運(yùn)行
- 在
dubbo-admin-server/src/main/resources/application.properties
中指定注冊(cè)中心地址 - 構(gòu)建
mvn clean package -Dmaven.test.skip=true
- 啟動(dòng)
-
mvn --projects dubbo-admin-server spring-boot:run
或者 cd dubbo-admin-distribution/target; java -jar dubbo-admin-${project.version}.jar
-
- 訪問(wèn)
http://localhost:38080
可以直接再I(mǎi)DE的md文件中進(jìn)行允許編譯對(duì)應(yīng)的dubbo-admin的代碼以及運(yùn)行服務(wù)。
Dubbo-Admin 動(dòng)態(tài)進(jìn)行流量隔離
Dubbo提供動(dòng)態(tài)流量隔離的服務(wù)治理能力属提,可以在無(wú)需重啟應(yīng)用的情況下权逗,動(dòng)態(tài)進(jìn)行流量隔離美尸。Dubbo可以通過(guò)XML配置冤议,注解配置,動(dòng)態(tài)配置實(shí)現(xiàn)流量隔離师坎,這里主要介紹動(dòng)態(tài)配置的方式恕酸。
允許多個(gè)Provider端服務(wù)
你可以直接進(jìn)行運(yùn)行服務(wù)進(jìn)行運(yùn)行多個(gè)實(shí)例。如下所示胯陋。
當(dāng)然也可以通過(guò)VM參數(shù)進(jìn)行調(diào)整為不同的dubbo.protocol.port蕊温,方便我們進(jìn)行路由轉(zhuǎn)發(fā)機(jī)制袱箱。
標(biāo)簽路由規(guī)則
將服務(wù)提供者進(jìn)行分組,約束流量只在指定分組中流轉(zhuǎn)义矛,從而實(shí)現(xiàn)流量隔離的目的发笔,有兩種方式可以完成實(shí)例分組,分別是動(dòng)態(tài)規(guī)則打標(biāo)和靜態(tài)規(guī)則打標(biāo)
2.1 動(dòng)態(tài)規(guī)則相較于靜態(tài)規(guī)則優(yōu)先級(jí)更高
標(biāo)簽路由
登錄Dubbo-Admin控制臺(tái)
用戶名為root凉翻,密碼為root了讨。
在左側(cè)導(dǎo)航欄選擇服務(wù)治理 > 標(biāo)簽路由。
點(diǎn)擊創(chuàng)建按鈕制轰,在創(chuàng)建新標(biāo)簽規(guī)則面板中前计,填寫(xiě)規(guī)則內(nèi)容,然后單擊保存垃杖。
配置模板
---
force: false
runtime: true
enabled: true
key: application-provider
tags:
- name: tag1
addresses: ["127.0.0.1:20880"]
- name: tag2
addresses: ["127.0.0.1:20881"]
...
對(duì)于流量隔離場(chǎng)景男杈,只需要理清楚以下問(wèn)題基本就知道配置該怎么寫(xiě)了:
修改服務(wù)所屬提供者應(yīng)用的配置。
應(yīng)用:scope: application, key: app-name(還可使用services指定某幾個(gè)服務(wù))调俘。
當(dāng)路由結(jié)果為空伶棒,是否強(qiáng)制返回。
- force=false: 當(dāng)路由結(jié)果為空彩库,降級(jí)請(qǐng)求tag為空的提供者苞冯。
- force=true: 當(dāng)路由結(jié)果為空,直接返回異常侧巨。
路由規(guī)則的優(yōu)先級(jí)
priority=1: 路由規(guī)則的優(yōu)先級(jí)舅锄,用于排序,優(yōu)先級(jí)越大越靠前執(zhí)行司忱,可不填皇忿,缺省為 0。
配置是否只對(duì)某幾個(gè)特定實(shí)例生效坦仍。
所有實(shí)例:addresses: ["0.0.0.0"] 或addresses: ["0.0.0.0:*"] 具體由side值決定鳍烁。
指定實(shí)例:addersses[實(shí)例地址列表]。
運(yùn)行服務(wù)提供者
可以從dubbo-admin中看到對(duì)應(yīng)的服務(wù)已經(jīng)注冊(cè)上來(lái)了
開(kāi)發(fā)服務(wù)消費(fèi)者
RpcContext.getContext().setAttachment("dubbo.tag",name);
切換不同的tag參數(shù)繁扎,即可完成流量轉(zhuǎn)發(fā):tag1 tag2
我們通過(guò)name參數(shù)進(jìn)行切換標(biāo)簽
請(qǐng)求 GET http://127.0.0.1:8082/add?name=tag1&age=12
我們可以看到打印了對(duì)應(yīng)provider1服務(wù)的日志
請(qǐng)求 GET http://127.0.0.1:8082/add?name=tag2&age=12
我們可以看到打印了對(duì)應(yīng)provider2服務(wù)的日志
小伙伴們幔荒,你們學(xué)會(huì)了嘛?