gateway
2024-04-05 16:26:31 22 举报
spring-cloud-gateway流程图
作者其他创作
大纲/内容
spring容器初始化
RouteDefinitionRouteLocator#getFilters找到所有配置的过滤器
RouteToRequestUrlFilter从属性中获取路由信息,并修改request
遍历所有路由调用AsyncPredicate进行判断
GatewayAutoConfiguration注入一系列配置,过滤器等
关键调用链
FilteringWebHandler核心处理流程
GatewayDiscoveryClientAutoConfiguration#initPredicates创建匹配条件。通过 serviceId 进行匹配
ReactiveLoadBalancerClientFilter对lb进行处理,获取实例信息并把实际请求路径写入到属性中
如需加入修改返回值的过滤器,优先级一定要比-1小,才会生效
RouteDefinitionRouteLocator#convertToRoute把RoutePredicateFactory,GatewayFilterFactory组装成route
RemoveCachedBodyFilter通过doFinally回调清除缓存
RouteDefinitionRouteLocator#getRoutes
CachingRouteLocator#getRoutes
RouteRefreshListener
DiscoveryClientRouteDefinitionLocator服务发现加载路由
在收到ContextRefreshedEvent,RefreshScopeRefreshedEvent,InstanceRegisteredEvent等可能需要修改Bean,服务实例信息时
RoutePredicateHandlerMapping#getHandlerInternal寻找处理器
获取route保存到exchange的属性中,并返回FilteringWebHandler
把所有GatewayFilterAdapter和GatewayFilter合并排序生成一个调用链
NettyRoutingFilter实际请求转发的地方
GatewayDiscoveryClientAutoConfiguration通过服务发现添加路由
RouteRefreshListener在容器刷新,服务注册,心跳状态变更时会发送RefreshRoutesEvent
NettyWriteResponseFilter通过then把返回值写入到http中
spring初始化后
RoutePredicateHandlerMapping#lookupRoute查找路由
ConfigurationService根据配置通过Factory生成Filter或Predicate
RouteDefinitionRouteLocator#combinePredicates根据配置等信息生成AsyncPredicate
请求开始,容器调用
ReactiveDiscoveryClient#getServices从注册中心获取所有的服务
DiscoveryClientRouteDefinitionLocator#getRouteDefinitions生成路由
会把一个路由的所有Predicate组成一个
DiscoveryClientRouteDefinitionLocator#buildRouteDefinition构建路由定义
发送RefreshRoutesEvent事件
CachingRouteLocator通过CacheFlux缓存路由
心跳事件为服务发现实现发送,如 nacos 30 秒一次
ForwardPathFilter对forward请求修改请求path
GatewayDiscoveryClientAutoConfiguration#initFilters修改 url,删除服务名称
CachingRouteDefinitionLocator#onApplicationEvent重新加载并缓存
DefaultGatewayFilterChain#filter开始执行调用链
loadFilters包装GlobalFilter为GatewayFilterAdapter
0 条评论
下一页