# 路由介绍
路由为内部微服务提供统一的对外入口,用于接收外部请求并转发到对应的后端服务。路由可分为以下三大类型
- 服务编排:把请求转发到通过服务编排模块配置出来的接口,选择服务名即可不用配置实例的IP和端口
- 服务发现:把请求转发到注册到服务注册中心的微服务,选择服务名即可不用配置实例的IP和端口
- 代理转发:把请求转发到无注册中心的服务,需要配置后端服务的实例IP和端口
路由支持以下功能:
- 支持服务注册中心
- 支持负载均衡
- 支持配置调用方
- 支持内置的key-auth, JWT, basic-auth等鉴权方式
- 支持配置插件
- 支持匹配正则表达式
- 支持路径测试,校验配置的路由是否正确
- 支持配置禁止访问的路由
# 配置路由
新增路由,填写基础信息
根据情况添加路由需要的插件,如:通过此路由的所有请求需要进行HTTP Basic认证和JWT校验,则添加以下插件。除内置插件外,也可添加自定义插件,自定义插件请参考插件机制章节文档。
配置好路由后,如果前后端的匹配规则比较复杂(如:使用了正则表达式或通配符),可以使用测试功能来检验一下配置是否正确
# API路径匹配规则
API路径匹配规则说明:
? 匹配一个字符
* 匹配一级目录内的0个或多个字符
** 匹配0级或多级目录
{fizz:[a-z]+} 匹配正则表达式 [a-z]+,匹配结果赋值给名为fizz的路径变量
后端API路径可以通过{$1}-{$n}来获取前端API路径中通配符和正则表达式的值,正则表达式的值也可以通过命名变量来获取;
例子:
前端API路径: /x/{fizz:[a-z]+}/z/**
后端API路径: /x/{fizz}/{$2} 或 /x/{$1}/{$2}
此例中 {fizz} 和{$1} 取的都是前端API路径中正则表达式{fizz:[a-z]+}的值
当请求接口路径/x/y/z/a/b/c时,会匹配到上面的路由,{fizz} 和{$1}的值为y, {$2}的值为a/b/c
# 启用APPID
路由支持配置APPID来限制调用方,启用APPID后调用方需按要求传输以下请求头
- fizz-appid APPID管理模块里维护的调用方ID
- fizz-sign APPID管理模块里设置的APPID对应的验签方式
- fizz-ts 请求时的时间戳
样例:
fizz-appid: 10001
fizz-sign: e4502ba3a71448bbbcecef22b305d2ba
fizz-ts: 1605255335977
# 自定义备用签名头
fizz-appid,fizz-sign和fizz-ts为默认的验符请求头,支持自定义可配置的备用签名头,当默认请求头没有值时取备用请求头的值
在application.yml里添加以下配置, 可以只配置其中一部分备用请求头,其它使用默认请求头。
custom.header.appid=app-id,gw-appid # 多个以逗号分隔,如果前一个请求头没有值网关按顺序取下一个的值
custom.header.sign=signature # 多个以逗号分隔,如果前一个请求头没有值网关按顺序取下一个的值
custom.header.ts=timestamp # 多个以逗号分隔,如果前一个请求头没有值网关按顺序取下一个的值