gateway
2024-04-05 16:26:31   23  举报             
     
         
 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 条评论
 下一页
  
   
   
   
   
  
  
  
  
  
  
  
  
 