首页 > 编程语言 > 详细

Spring-Cloud-Gateway-基础篇(一)

时间:2021-01-11 18:15:58      阅读:103      评论:0      收藏:0      [点我收藏+]

目标

记录

添加 Actuator 监控

Maven 依赖

<dependency>   
    <groupId>org.springframework.boot</groupId>   
    <artifactId>spring-boot-starter-actuator</artifactId> 
</dependency>

配置文件修改

management:
  endpoint:
    gateway:
      enabled: true
  endpoints:
    web:
      exposure:
        include: ‘*‘

数据访问

查看所有 routes: http://localhost:8080/actuator/gateway/routes

技术分享图片

查看所有 globalfilters: http://localhost:8080/actuator/gateway/globalfilters

技术分享图片

目录结构分析

Spring Cloud Gateway Core

  • 工程代码中显示这个项目已经弃用

spring-cloud-gateway-dependencies

  • 都是一些依赖,没有代码

spring-cloud-gateway-mvc

  • 对于 Spring-MVC 的支持

spring-cloud-gateway-webflux

  • 对于 webflux 的支持

spring-cloud-gateway-server

  • 核心中的核心
  • 所有关键逻辑的地方

Spring.factories 配置启动类

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\org.springframework.cloud.gateway.config.GatewayClassPathWarningAutoConfiguration,\org.springframework.cloud.gateway.config.GatewayAutoConfiguration,\org.springframework.cloud.gateway.config.GatewayHystrixCircuitBreakerAutoConfiguration,\org.springframework.cloud.gateway.config.GatewayResilience4JCircuitBreakerAutoConfiguration,\org.springframework.cloud.gateway.config.GatewayLoadBalancerClientAutoConfiguration,\org.springframework.cloud.gateway.config.GatewayNoLoadBalancerClientAutoConfiguration,\org.springframework.cloud.gateway.config.GatewayMetricsAutoConfiguration,\org.springframework.cloud.gateway.config.GatewayRedisAutoConfiguration,\org.springframework.cloud.gateway.discovery.GatewayDiscoveryClientAutoConfiguration,\org.springframework.cloud.gateway.config.SimpleUrlHandlerMappingGlobalCorsAutoConfiguration,\org.springframework.cloud.gateway.config.GatewayReactiveLoadBalancerClientAutoConfiguration

org.springframework.boot.env.EnvironmentPostProcessor=\org.springframework.cloud.gateway.config.GatewayEnvironmentPostProcessor

核心配置类(spring-cloud-gateway-server)

基础配置

  • GatewayAutoConfiguration
  • 功能:加载网关基础模块
  • 基础模块包块:
    • GatewayActuatorConfiguration
    • HystrixConfiguration
    • NettyConfiguration

响应式或非响应式模式配置

  • GatewayClassPathWarningAutoConfiguration
  • 功能:主要扫描确定是使用 Spring-MVC 的模式,还是 Webflux 的格式。
  • 要点:
    • 确保在 GatewayAutoConfiguration 加载前加载
    • 当存在 \(org.springframework.web.servlet.DispatcherServlet\) 这个类时,加载 \(SpringMvcFoundOnClasspathConfiguration\)
    • 当不存在 \(org.springframework.web.reactive.DispatcherHandler\) 加载 \(WebfluxMissingFromClasspathConfiguration\)

负载均衡配置

  • GatewayLoadBalancerClientAutoConfiguration
  • GatewayNoLoadBalancerClientAutoConfiguration
  • GatewayReactiveLoadBalancerClientAutoConfiguration

监控配置

  • GatewayMetricsAutoConfiguration

Redis 配置

  • GatewayRedisAutoConfiguration

限流相关配置

  • GatewayResilience4JCircuitBreakerAutoConfiguration
  • GatewayHystrixCircuitBreakerAutoConfiguration

URLMapping 配置

  • SimpleUrlHandlerMappingGlobalCorsAutoConfiguration

启动加载流程

技术分享图片

  • 根据属性加载,初始化 Netty HttpClient 以及对应的 Netty Bean,以及初始化了NettyRoutingFilter.
  • 初始化对应的 GlobalFilter
  • 初始化对应的 Filter
  • 初始化对应的 Predicate
  • 初始化 RouteDefinitionLocator ,收集所有的路由表 GatewayAutoConfiguration#routeDefinitionLocator,这个过程中包括初始化所有的 RoutePredicateFactory
  • 初始化 RouteLocator ,根据上一步得到的RouteDedinitionLocator
  • 初始化 GatewayControllerEndpoint
  • 初始化 FilteringWebHandler ,通过上面收集好的 GlobalFilter,在此过程中并对 GlobalFilter 排序
  • 初始化 GlobalCorsProperties
  • 初始化 routePredicateHandlerMapping 这个是整个核心入口

实际执行流程

getHandlerInternal 入口

我们可以根据官网的示意图,可知程序的入口是通过 RoutePredicateHandlerMapping 核心处理,因此我们在 对应的 getHandlerInternal 方法打断点,查看请求流程;

技术分享图片

根据堆栈我们可以清楚看到实际请求时,DispatcherHandler 到 AbstractHandlerMapping 然后 RoutePredicateHandlerMapping 最后执行到 getHandlerInternal;

exchange 理解

贯穿程序请求的上下文中,我们一直会看到 exchange 的变量,ServerWebExchange 默认实现是 DefaultServerWebExchange,我们从截图中可以看出这个变量不仅包含请求的上下文,还包括 applicationContext,相当于用啥都不愁了。

技术分享图片

Spring-Cloud-Gateway-基础篇(一)

原文:https://www.cnblogs.com/holddie/p/springcloudgatewayji-chu-pian-yi.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!