1. 规则配置

1.1. 功能截图

1.2. 功能详述

说明规则配置包含了两部分:用户路由规则、全局配置。

用户路由规则主要是搭配灰度发布和多版本发布,填写对应的用户规则使符合规则用户访问对应路由版本应用。这个配置在灰度发布功能内尤为重要,灰度功能依赖用户规则的配置。多版本发布可以使用请求头方式进行请求调试(在请求的Header加入NextRouteVersion=路由版本),也可以通过设定规则,访问时带有用户信息进行路由版本的自动判断。

全局配置主要是功能开关与规则开关。

1.2.1. 用户规则

  • 新建用户规则

  • 字段说明
  • 规则名称:规则有说明性的标识。
  • 类型:类型目前有3种,分别是用户标识、移动设备号、机构号,任选一作为规则的主要条件。
  • 匹配值:类型对应的value,支持多个值用”,”分隔。
  • 客户端:默认为所有,不区分客户端类型,客户端可以自定义,默认提供客户端类型有ios(苹果)、android(安卓)、browser(浏览器)、wechat(微信)等,客户端存在的意义在于和主要条件搭配,做到匹配,例如:识别某个用户来自app的请求,识别某个支行机构的移动设备请求。
  • 路由版本:满足以上匹配条件的请求所走的路由版本,在灰度发布中一般只选gray。
  • 是否启用:创建和修改时指定启用状态。
  • 删除用户规则

对需要删除的规则进行复选,点击删除按钮进行批量删除。

  • 导出用户规则

对需要导出的规则进行选中,点击导出会生成json文件。

  • 导入用户规则

点击页面的导入,并选中其他环境导出的用户规则json。对于规则名称重复的规则会进行跳过。

  • 规则升降级

在用户匹配规则时,可能有相同的条件覆盖同一个用户,规则是按序号排列进行一一匹配,一旦规则符合就停止匹配。对规则顺序可以进行升级降级,点击对应规则操作按钮即可。

  • 规则修改

点击规则操作栏的修改按钮,即可修改规则,界面内容与新增规则相同。

  • 规则测试

点击页面的规则测试按钮即可进入规则测试页面。

规则页面模拟应用实际上送数据,并给出用户访问的路由版本。

1.2.2. 全局配置

全局配置主要是路由规则或是用户规则的一些开关。

  • 路由总开关

路由总开关是整个分布式路由的开关,关闭时应用路由就不受NTC规则限制。

  • 本中心路由优先

本中心路由适用于多活环境。多活环境当跨机房服务使用一个注册中心时,本中心路由可以保证服务之间先调用本中心,当本中心无可调用实例才会进行跨机房调用。

  • 用户路由规则总开关

开关是用于灰度发布功能。在灰度发布过程中需要对灰度相关的用户规则进行开启和关闭,通过另外的统一开关进行控制,目的在于不需要对每个灰度规则进行一一开启和关闭。一般情况下不需要改变这个开关。

  • 请求头路由映射

当前端有自己的灰度方式时,前端判断灰度用户后对灰度请求设置一个特殊的请求头。后端根据请求头解析成对应的路由版本并设置到请求上下文中。如此完成前端灰度用户请求头传到后端。

如图中例子,当前Http请求头带有resource-version这个key时,并且value为10.3.1,则在后端应用中会直接认为是gray路由的版本。

如果设置多条规则,并且请求头中都命中,则根据列表顺序进行匹配。

1.2.3. 用户规则对接

规则匹配基本在网关判断,NTC在应用端的jar next-probe会提供对应接口。


public class RouteFilter implements Filter {

@NextAutowired(required = false)

private RouteClient routeClient;

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

throws IOException, ServletException {

if (routeClient != null) {

String userId = ((HttpServletRequest) request).getHeader("UserId");

RouteUser routeUser = new RouteUser();

routeUser.setUser(userId);

//routeUser.setDevice(移动设备号);

//routeUser.setDept(机构号);

//routeUser.setClientType(客户端);

routeClient.setVersion(routeUser);

}

chain.doFilter(request, response);

}

}

在任何Spring的Bean中都可以用@NextAutowired注解来注入RouteClient服务,在探针未开启或相应功能未开启时,不会注入服务,需要做!=Null判断。

results matching ""

    No results matching ""