You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
# 原理分析之如何路由
|
|
|
|
|
|
|
|
Spring Cloud Gateway通过一系列的Filter来进行数据的传输,如下图所示:
|
|
|
|
|
|
|
|
![流程图](images/90012_1.png)
|
|
|
|
|
|
|
|
SOP网关在此基础上新增了几个Filter用来处理自己的逻辑,如:前置校验、结果返回。
|
|
|
|
|
|
|
|
| 过滤器 | 类型 | Order | 功能 |
|
|
|
|
| ----- | ---- | ----------------------- | ---------------------------- |
|
|
|
|
|IndexFilter| `自定义` | -2147483648 | 入口过滤器,获取参数、签名校验 |
|
|
|
|
|ParameterFormatterFilter | `自定义` | -2147482647 | 格式化参数 |
|
|
|
|
|LimitFilter|`自定义`|-2147482447|限流|
|
|
|
|
|ForwardPathFilter|系统自带|0 |设置转发的path|
|
|
|
|
|RouteToRequestUrlFilter|系统自带|10000|设置转发host|
|
|
|
|
|SopLoadBalancerClientFilter|`自定义`|10100|LoadBalance获取转发实例|
|
|
|
|
|NettyRoutingFilter|系统自带|2147483647|获取httpclient发送请求|
|
|
|
|
|ForwardRoutingFilter|系统自带|2147483647|请求分发|
|
|
|
|
|GatewayModifyResponseGatewayFilter|`自定义`|-2|处理响应结果|
|
|
|
|
|
|
|
|
一个完整的请求会自上而下经过这些Filter,下面讲解如何动态设置路由。
|
|
|
|
|
|
|
|
## 动态设置路由
|
|
|
|
|
|
|
|
网关启动后会从注册中心拉取微服务实例,然后请求微服务提供的一个接口(`/sop/routes`),获取开放接口信息(被`@Open`注解的接口)。
|
|
|
|
|
|
|
|
监听处理类在:`com.gitee.sop.bridge.route.NacosRegistryListener`
|
|
|
|
|
|
|
|
获取到路由信息后,将路由信息缓存到本地,并保存到数据库,代码在:`com.gitee.sop.gatewaycommon.gateway.route.GatewayRouteCache.load`
|
|
|
|
|
|
|
|
然后动态设置Gateway路由,代码在:`com.gitee.sop.gatewaycommon.gateway.route.GatewayRouteRepository.refresh`
|
|
|
|
|
|
|
|
当有微服务重新启动时,网关会监听到微服务实例有变更,会重复上述步骤,确保网关存有最新的路由。
|