1. 程式人生 > 其它 >HZERO微服務平臺05: 利用灰度釋出在本機快速開發除錯

HZERO微服務平臺05: 利用灰度釋出在本機快速開發除錯

目錄

背景

目前微服務體系下請求的過程:

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外掛, 會轉發到線上服務;