本文主要基于 Spring-Cloud-Gateway 2.0.X M4
1. 概述
2. GatewayClassPathWarningAutoConfiguration
3. GatewayLoadBalancerClientAutoConfiguration
4. GatewayRedisAutoConfiguration
5. GatewayAutoConfiguration
666. 彩蛋
友情提示:欢迎关注公众号【芋道源码】。?关注后,拉你进【源码圈】微信群讨论技术和源码。
友情提示:欢迎关注公众号【芋道源码】。?关注后,拉你进【源码圈】微信群讨论技术和源码。
友情提示:欢迎关注公众号【芋道源码】。?关注后,拉你进【源码圈】微信群讨论技术和源码。
1. 概述
本文主要分享 Spring Cloud Gateway 启动初始化的过程。
在初始化的过程中,涉及到的组件会较多,本文不会细说,留到后面每篇文章针对每个组件详细述说。
那么这有什么意义呢?先对 Spring Cloud Gateway 内部的组件有整体的印象。
在官方提供的实例项目 spring-cloud-gateway-sample
,我们看到 GatewaySampleApplication 上有 @EnableAutoConfiguration
注解。因为该项目导入了 spring-cloud-gateway-core
依赖库,它会扫描 Spring Cloud Gateway 的配置。
在 org.springframework.cloud.gateway.config
包下,我们可以看到四个配置类 :
GatewayAutoConfiguration
GatewayClassPathWarningAutoConfiguration
GatewayLoadBalancerClientAutoConfiguration
GatewayRedisAutoConfiguration
它们的初始化顺序如下图 :
推荐 Spring Cloud 书籍:
请支持正版。下载盗版,等于主动编写低级 BUG 。
程序猿DD —— 《Spring Cloud微服务实战》
周立 —— 《Spring Cloud与Docker微服务架构实战》
两书齐买,京东包邮。
推荐 Spring Cloud 视频:
Java 微服务实践 - Spring Boot
Java 微服务实践 - Spring Cloud
Java 微服务实践 - Spring Boot / Spring Cloud
2. GatewayClassPathWarningAutoConfiguration
Spring Cloud Gateway 2.x 基于 Spring WebFlux 实现。
org.springframework.cloud.gateway.config.GatewayClassPathWarningAutoConfiguration
,用于检查项目是否正确导入 spring-boot-starter-webflux
依赖,而不是错误导入 spring-boot-starter-web
依赖。
点击链接 链接 查看 GatewayClassPathWarningAutoConfiguration 的代码实现。
3. GatewayLoadBalancerClientAutoConfiguration
org.springframework.cloud.gateway.config.GatewayLoadBalancerClientAutoConfiguration
,初始化 LoadBalancerClientFilter ,点击 链接 查看代码。
在 《Spring-Cloud-Gateway 源码解析 —— 过滤器 (4.4) 之 LoadBalancerClientFilter 负载均衡》 详细解析 LoadBalancerClientFilter 的代码实现。
4. GatewayRedisAutoConfiguration
org.springframework.cloud.gateway.config.GatewayRedisAutoConfiguration
,初始化 RedisRateLimiter 。
RequestRateLimiterGatewayFilterFactory 基于 RedisRateLimiter 实现网关的限流功能,在 《Spring-Cloud-Gateway 源码解析 —— 过滤器 (4.10) 之 RequestRateLimiterGatewayFilterFactory 请求限流》 详细解析相关的代码实现。
5. GatewayAutoConfiguration
org.springframework.cloud.gateway.config.GatewayAutoConfiguration
,Spring Cloud Gateway 核心配置类,初始化如下 :
NettyConfiguration
GlobalFilter
FilteringWebHandler
GatewayProperties
PrefixPathGatewayFilterFactory
RoutePredicateFactory
RouteDefinitionLocator
RouteLocator
RoutePredicateHandlerMapping
GatewayWebfluxEndpoint
组件关系交互如下图 :
5.1 网关的开启与关闭
从 GatewayAutoConfiguration 上的注解 @ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMissing = true)
,我们可以看出 :
通过
spring.cloud.gateway.enabled
配置网关的开启与关闭。matchIfMissing = true
=> 网关默认开启。
5.2 初始化 NettyConfiguration
org.springframework.cloud.gateway.config.NettyConfiguration
,Netty 配置类。代码如下 :
1: @Configuration
2: @ConditionalOnClass(HttpClient.class)
3: protected static class NettyConfiguration {
4: @Bean // 1.2
5: @ConditionalOnMissingBean
6: public HttpClient httpClient(@Qualifier("nettyClientOptions") Consumer<?