背景

目前使用spring-cloud-gateway为基构建了公司内部服务网关,遇到了一些问题,记录于此

问题列表

cloud 与 boot 对应关系

cloud版本与boot版本需要有相应对应关系,官方有提供关系数据

路由数据自定义

数据来源自由定义,主要是将数据转换为RouteDefinition(路由定义类)

  1. 继承RouteDefinitionRepository
  2. 重写getAllRouteDefinitions方法
    由框架将RouteDefinition转换为真实的Route对象

RouteDefinition中
predicates可以使用

1
2
3
4
5
6
7
8
[
{
"name" : "Path",
"args" : {
"Path" : "/**"
}
}
]

filters可以使用

1
2
3
4
5
6
7
8
[
{
"name" : "StripPrefix",
"args" : {
"_genkey_0" : 0
}
}
]
输入输出日志

实现 GlobalFilter、Ordered接口
参考该项目gateway-request-recorder-starter

转发性能

经由个人测试,当添加完输入输出拦截器,并读取输入输出流后,性能下降严重
在该github issue中可见
当前尚未解决方案

超时时间设置

gateway项目默认可设置全局超时时间

1
2
3
4
5
6
spring:
cloud:
gateway:
httpclient:
connect-timeout: 10000
response-timeout: 10000

当我们需要针对Route级别进行超时时间限制时,可参考该github issue
当版本大于Hoxton.SR4,合并了上述request merge后,在RouteDefinition中添加了metaData字段,作为额外信息

gateway提供项目本身接口

可使用WebFilter、Ordered进行拦截,注意此时所有的请求都会走该拦截器

gateway全局异常处理

可参考该教程

参考文档