配置单元化
最近更新时间: 2024-10-17 17:10:00
准备工作
开始实践微服务网关单元化功能之前,请确保您已完成 [微服务网关 SDK 使用指南]。
注意:
- 单元化网关支持跨命名空间调用,单元化配置仅支持部署在全局命名空间下的网关。
- 从1.28.0版本开始,TSF 微服务网关 SDK 支持提供基于 Zuul 的单元化功能。
- 微服务网关要么是单元化网关,要么是非单元化网关,开启了单元化的功能,该网关就是单元化网关,否则就是非单元化网关。
Zuul
微服务网关 SDK 使用单元化功能
- 向自定义网关过滤器 Filter 类中添加 tag 标签:
// 下面省略了无关的代码 import com.tencent.tsf.gateway.core.annotation.TsfGatewayFilter; import com.tencent.tsf.unit.TsfUnitContext;
@TsfGatewayFilter public class TestFilter extends TsfGatewayZuulFilter {
private Logger logger = LoggerFactory.getLogger(TestFilter.class);
@Override
public String filterType() {
return PRE_TYPE;
}
@Override
public int filterOrder() {
// 注:设置 putTag 的filter的order必须在ZUUL_UNIT_ORDER之前
return TsfGatewayFilterOrderConstants.ZUUL_UNIT_ORDER - 1;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() throws ZuulException {
// 单元化场景的putTag操作
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
String userId = request.getHeader("userId");
if(StringUtils.isNotBlank(userId)) {
logger.info("put unit tag userId:{}", userId);
TsfUnitContext.putTag("userId", userId);
}
System.out.println("hello world");
logger.info("hello world");
return null;
}
}
- 使用包 com.tencent.tsf.unit 下的类 TsfUnitContext 的方法 putTag 来设置单元化标签
- 自定义设置 putTag 的 Filter 的顺序必须在 TsfGatewayFilterOrderConstants.ZUUL_UNIT_ORDER 之前
2. 开启单元化功能并创建单元化规则。
## 开启单元化功能并创建单元化规则
### 操作步骤
1. 登录 【TSF 控制台】,在左侧菜单栏选择【微服务网关】>【网关管理】。
2. 在网关管理页面,点击需要配置单元化规则的微服务网关,进入该微服务网关相关的配置页面,在上方菜单栏中的【基本信息】的“单元化配置”中,点击右侧的“编辑”来开启微服务网关的单元化功能。
![](//imgcache.fincloud.tencent.cn/doc_pdf/static//imgs/f_2021-8-26_f_353c1bc0-061e-11ec-85d6-c36c0d17ee00.png)
3. 开启单元化功能以后,刷新该微服务网关相关的配置页面,此时在页面上方的菜单栏中会出现菜单【单元范围】和【单元化规则】。
4. 点击菜单【单元范围】的按钮“关联命名空间”,选择需要关联到该单元下的命名空间(可通过单元化规则路由到该命名空间),点击“提交”按钮。
![](//imgcache.fincloud.tencent.cn/doc_pdf/static//imgs/f_2021-8-26_f_3c1b2440-061e-11ec-85d6-c36c0d17ee00.png)
5. 点击菜单【单元化规则】的按钮“新建规则”,填写对应的单元化规则,最后选择目的地命名空间(该命名空间是单元范围中的其中一个命名空间),点击“提交”按钮。
![](//imgcache.fincloud.tencent.cn/doc_pdf/static//imgs/f_2021-8-26_f_4109f580-061e-11ec-85d6-c36c0d17ee00.png)
- 单元化规则之间的按顺序匹配,即如果未命中规则1,则会继续往下去匹配规则2,如果未命中规则2,则再继续往下去匹配规则3,直到命中规则为止。
- 假如没有命中任何一条规则且在开启了该单元化规则的情况下,那么以单元化形式调用的请求会直接报错(单元化形式调用的请求指的是客户端 putTag 了但该 tag 未命中规则或者直接以HTTP方式调用了单元化网关但没有 putTag 的请求)。
- 单元规则中的标签配置之间有“且”和“或”的逻辑关系可供选择。
6. 最后,在菜单【单元化规则】列表中选择一个需要生效的单元化规则在其“状态”列点击开启即可。
![](//imgcache.fincloud.tencent.cn/doc_pdf/static//imgs/f_2021-8-26_f_514896e0-061e-11ec-97c7-1dbf52ec803b.png)