HZERO微服務平臺05: 利用灰度釋出在本機快速開發除錯
阿新 • • 發佈:2021-11-18
目錄
背景
目前微服務體系下請求的過程:
web -> gateway -> 業務服務(例項1、例項2...)
從瀏覽器發出的請求通過閘道器轉發到業務服務, 當業務服務有多個例項時, 閘道器會隨機(或輪詢等策略)轉發到某個服務例項;
當線上和本地各有一個例項時, 前端發出的請求會在本地和線上隨機發送, 既影響線上使用者使用, 也影響開發人員除錯;
所以本地啟動服務例項時, 通常需要修改服務名, 用swagger或postman除錯, 不能通過前端頁面來除錯.
我們希望實現的效果: 本地服務不修改服務名, 從開發人員瀏覽器發出的請求只會被轉發到開發人員本機的例項, 線上其他使用者發出的請求正常請求到線上的服務, 開發除錯和正常使用都不影響;
灰度釋出概念:
灰度釋出_百度百科
操作步驟
總體思路: 給後端服務和前端請求加上標籤, 閘道器通過標籤選擇例項;
後端服務增加元資料
本地服務不需要修改服務名, 增加metadata
配置:
spring:
cloud:
nacos:
discovery:
metadata:
GROUP: QXX
其中GROUP
是固定key, 必須大寫; QXX
是自定義的名稱; 服務啟動後可以在nacos裡看到:
也可以通過環境變數配置:
SPRING_APPLICATION_JSON={"spring.cloud.nacos.discovery.metadata.GROUP": "QXX"}
下面配置是無效的, 因為"GROUP"會被轉換成小寫:
SPRING_CLOUD_NACOS_DISCOVERY_METADATA_GROUP: QXX
用瀏覽器外掛給前端請求新增header
瀏覽器安裝外掛, 給所有請求自動新增header, 以ModHeader
外掛為例:
其中的X-Eureka-Label
是固定的header名, 大小寫任意; QXX
和服務端定義的元資料相對應.
此時瀏覽器發出的請求都會被帶上X-Eureka-Label
的header;
驗證效果
開啟前端, 本地發出的請求會全部轉發到本地服務; 關閉ModHeader外掛, 會轉發到線上服務;