路由概述
更新時間 2024-10-14 11:19:49
最近更新時間: 2024-10-14 11:19:49
分享文章
本章節介紹云原生網關支持的多種路由方式
概述
云原生網關基于用戶配置的host,path,query,header,cookie等信息配置特定的轉發規則,當前云原生網關支持多種路由方式,包括單服務路由、多服務路由、標簽路由、mock和重定向路由等。
單服務路由
單服務路由根據用戶配置的路由規則將請求轉發到單個后端服務,例如請求匹配/path1轉發到svc1,匹配/path2轉發到svc2

多服務路由
多服務路由模式下支持將請求轉發到多個不同的后端服務,每個后端服務配置不同的訪問權重(總權重之和為100%);該模式可用于灰度發布等場景;如對于到/path的請求,30%轉發到svc1,70%轉發到svc2

標簽路由
針對同一個服務,可以根據nacos或者k8s中記錄的服務標簽信息將服務分組;標簽路由模式下,支持將請求在同一個服務的不同標簽分組之間分流;例如,根據服務標簽信息將testSvc打上v1和v2兩個標簽,可以在匹配路由時30%的流量轉發到v1版本,70%的流量轉發到v2版本:

或者根據請求的內容將請求轉發到不同的服務版本:

mock路由
該模式主要用于測試場景,可以配置路由直接返回mock內容,包括HTTP狀態碼,返回內容等信息,例如針對/path的請求返回HTTP 200,內容為"Hello!":

重定向路由
返回3xx狀態碼以及重定向地址,引導調用方訪問重定向的地址,如下:

dubbo代理路由
通過內部dubbo服務代理插件請求dubbo服務,并返回結果。
本功能目前對后端dubbo服務有如下限制:
- 本功能使用hessian2作為反序列化協議,請確保后端dubbo服務使用該協議作為默認的數據序列化協議。
- 本功能對dubbo服務的數據返回有相關要求,來確保能將數據結果正確映射成http響應,示例代碼如下所示:
- 使用Map<String, Object>作為結果返回體;
- 其中固定key值body映射為http響應結果;
- 固定key值status映射為http響應狀態碼;
- 自定義key值和value值映射為http響應體header。
public Map<String, Object> tengineDubbo(Map<String, Object> context) {
for (Map.Entry<String, Object> entry : context.entrySet()) {
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
Map<String, Object> ret = new HashMap<String, Object>();
ret.put("body", "dubbo success\n");
ret.put("status", "200");
ret.put("test", "123");
return ret;
}