Spring cloud gateway 源码分析02 网关路由功能01

Spring cloud gateway 源码分析02 网关路由功能01

核心加载,查找路由函数如下

Spring cloud gateway 源码分析02 网关路由功能01

获取路由route后,再调用validateRoute校验

创建一个类型为 org.springframework.cloud.gateway.config.GatewayProperties 的 Bean 对象,用于加载配置文件配置的 RouteDefinition / FilterDefinition

Spring cloud gateway 源码分析02 网关路由功能01

Spring cloud gateway 源码分析02 网关路由功能01

Spring cloud gateway 源码分析02 网关路由功能01

看一下sample中的路由例子,如下

Spring cloud gateway 源码分析02 网关路由功能01

指定一个filter,处理后转发到指定的uri

Spring cloud gateway 源码分析02 网关路由功能01

Route 的构建,分成同步和异步,入参都为RouteDefinition

看加载RouteDefinition

Spring cloud gateway 源码分析02 网关路由功能01

Spring cloud gateway 源码分析02 网关路由功能01

Spring cloud gateway 源码分析02 网关路由功能01

RouteDefinition,通过字符串text 初始化

Spring cloud gateway 源码分析02 网关路由功能01

PredicateDefinition 初始化同理

Spring cloud gateway 源码分析02 网关路由功能01

FilterDefinition 同理

Spring cloud gateway 源码分析02 网关路由功能01

Spring cloud gateway 源码分析02 网关路由功能01

从配置文件读取路由配置

routes 属性,路由配置。通过 spring.cloud.gateway.routes 配置

Spring cloud gateway 源码分析02 网关路由功能01

 

Spring cloud gateway 源码分析02 网关路由功能01

路由存储

Spring cloud gateway 源码分析02 网关路由功能01

Spring cloud gateway 源码分析02 网关路由功能01

也就是更新本地内存map的routes数据

 

DiscoveryClientRouteDefinitionLocator   路由的发现,获取注册在注册中心的服务列表,生成对应的 RouteDefinition 数组。

Spring cloud gateway 源码分析02 网关路由功能01

Spring cloud gateway 源码分析02 网关路由功能01

1.首先解析配置文件的表达式,获取includePredicate

2.根据解析出的urlExpr和服务实例serviceInstance,构造出routeDefinition

3.再解析出配置文件中的predicate,添加到RouteDefinition中

4.继续从配置文件中解析出filters,添加到RouteDefinition中

5.最后返回RouteDefinition