配置单元化

最近更新时间: 2024-09-05 15:09:00

准备工作

开始实践微服务网关单元化功能之前,请确保您已完成 [微服务网关 SDK 使用指南]。

注意:

  • 单元化网关支持跨命名空间调用,单元化配置仅支持部署在全局命名空间下的网关。
  • 从1.28.0版本开始,TSF 微服务网关 SDK 支持提供基于 Zuul 的单元化功能。
  • 微服务网关要么是单元化网关,要么是非单元化网关,开启了单元化的功能,该网关就是单元化网关,否则就是非单元化网关。

Zuul

微服务网关 SDK 使用单元化功能

  1. 向自定义网关过滤器 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)