概述
云原生网关基于用户配置的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;
}