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判断。