gateway整体逻辑
1.流程图
2.几个关键的类
- org.springframework.web.reactive.DispatcherHandler: 请求分发处理器;
- Spring WebFlux 的访问入口;
- 类似于spring mvc DispatcherServlet,可以类比spring mvc 接收到请求;
- DispatcherHandler匹配 HandlerMapping此处会匹配到scg的RoutePredicateHandlerMapping
org.springframework.cloud.gateway.handler.RoutePredicateHandlerMapping:HandlerMapping的实现;
- 通过RouteLocator匹配 Route: getHandlerInternal方法调用lookupRoute()方法,通过routeLocator获取所有配置的route,通过里面的Predicate配置来遍历判断找出符合的Route
- getHandlerInternal中返回FilteringWebHandler
org.springframework.cloud.gateway.handler.FilteringWebHandler: WebHandler的实现;
- FilteringWebHandler被RoutePredicateHandlerMapping返回后,在DispatcherHandler中被SimpleHandlerAdapter执行handle方法;
- 责任链模式:获取Route的GatewayFilter数组,创建DefaultGatewayFilterChain的过滤链;链式调用GatewayFilter
3.项目结构
核心module为spring-cloud-gateway-server
- actuate: 实现springboot actuator的端点,暴露route filter predicate等信息
- config: 使用springboot的配置注解的各类配置类
- discover:通过注册中心获取路由Route的核心功能配置类及实现类
- event:实现ApplicationEvent的事件类,例如路由刷新事件RefreshRoutesEvent
- filter: 包含特定路由的GatewayFilterFactory,GatewayFiler以及全局的GlobalFilter
- handler: 包含匹配route的断言工厂AbstractRoutePredicateFactory的所有默认实现,以及核心类FilteringWebHandler及RoutePredicateHandlerMapping
- route:路由的定义类,及路由定位类CachingRouteLocator的所有实现,及路由定义定位类CompositeRouteDefinitionLocator的所有实现,路由存储接口RouteDefinitionRepository及其所有实现
- support:工具类;如HTTP协议处理,组件名处理,日期转换等