Spring Cloud Gateway 解析——初始化配置
作为系统的统一入口,API网关可提供请求路由与组合、协议转换、安全认证、服务鉴权、流量控制与日志监控等服务。当企业将所有的应用使用微服务的架构管理起来,那么API网关就起到了微服务网关的作用。 而当企业只是将系统与系统之间的调用使用REST方式进行访问时使用API网关对调用进行管理,那么API网关起到的就是API服务治理的作用。
请求到来,网关是如何处理的呢?我们看一下如下的处理流程图。
-
请求发送到网关, DispatcherHandler
是HTTP请求的中央分发器,将请求匹配到相应的HandlerMapping
, -
请求与处理器之间有一个映射关系,网关将会对请求进行路由,handler此处会匹配到 RoutePredicateHandlerMapping
,匹配请求对应的 Route 。 -
随后到达网关的web处理器,该WebHandler代理了一系列网关过滤器和全局过滤器的实例,如对请求或者响应的Header处理(增加或者移除某个Header)。 -
最后,转发到具体的代理服务。
这里比较重要的功能点是路由的过滤和路由的定位,Spring Cloud Gateway提供了非常丰富的路由过滤器工厂和路由断言工厂。本文将会按照自上而下的顺序组织这部分的源码分析。
初始化配置
在Spring Cloud Gateway的依赖后,作为starter的jar包,会自动初始化一些类:
-
GatewayLoadBalancerClientAutoConfiguration,客户端负载均衡配置类 -
GatewayRedisAutoConfiguration,redis的自动配置类 -
GatewayDiscoveryClientAutoConfiguration,服务发现自动配置类 -
GatewayClassPathWarningAutoConfiguration,webflux依赖检查的配置类 -
GatewayAutoConfiguration,核心配置类,配置路由规则、过滤器等
这些类的配置方式就不一一列出讲解了,主要看一下涉及到的网关属性配置定义,很多对象的初始化都依赖于我们在应用服务中配置的网关属性,GatewayProperties
中是网关中主要的配置文件。
@ConfigurationProperties("spring.cloud.gateway")
@Validated
public class GatewayProperties {
//路由列表
@NotNull
@Valid
private List<RouteDefinition> routes = new ArrayList<>();
private List<FilterDefinition> defaultFilters = new ArrayList<>();
private List<MediaType> streamingMediaTypes = Arrays.asList(MediaType.TEXT_EVENT_STREAM,
MediaType.APPLICATION_STREAM_JSON);
//...
}
GatewayProperties
中有三个属性,分别是路由、默认过滤器和MediaType的配置,我们之前的基础应用的例子是配置的前两个属性。routes
是一个列表,对应的对象属性是路由定义RouteDefinition
;defaultFilters
是默认的路由过滤器,会应用到每个路由中;streamingMediaTypes
默认支持两中类型APPLICATION_STREAM_JSON
和TEXT_EVENT_STREAM
。
-
请求发送到网关, DispatcherHandler
是HTTP请求的中央分发器,将请求匹配到相应的HandlerMapping
, -
请求与处理器之间有一个映射关系,网关将会对请求进行路由,handler此处会匹配到 RoutePredicateHandlerMapping
,匹配请求对应的 Route 。 -
随后到达网关的web处理器,该WebHandler代理了一系列网关过滤器和全局过滤器的实例,如对请求或者响应的Header处理(增加或者移除某个Header)。 -
最后,转发到具体的代理服务。
这里比较重要的功能点是路由的过滤和路由的定位,Spring Cloud Gateway提供了非常丰富的路由过滤器工厂和路由断言工厂。本文将会按照自上而下的顺序组织这部分的源码分析。
初始化配置
在Spring Cloud Gateway的依赖后,作为starter的jar包,会自动初始化一些类:
-
GatewayLoadBalancerClientAutoConfiguration,客户端负载均衡配置类 -
GatewayRedisAutoConfiguration,redis的自动配置类 -
GatewayDiscoveryClientAutoConfiguration,服务发现自动配置类 -
GatewayClassPathWarningAutoConfiguration,webflux依赖检查的配置类 -
GatewayAutoConfiguration,核心配置类,配置路由规则、过滤器等
这些类的配置方式就不一一列出讲解了,主要看一下涉及到的网关属性配置定义,很多对象的初始化都依赖于我们在应用服务中配置的网关属性,GatewayProperties
中是网关中主要的配置文件。
@ConfigurationProperties("spring.cloud.gateway")
@Validated
public class GatewayProperties {
//路由列表
@NotNull
@Valid
private List<RouteDefinition> routes = new ArrayList<>();
private List<FilterDefinition> defaultFilters = new ArrayList<>();
private List<MediaType> streamingMediaTypes = Arrays.asList(MediaType.TEXT_EVENT_STREAM,
MediaType.APPLICATION_STREAM_JSON);
//...
}
GatewayProperties
中有三个属性,分别是路由、默认过滤器和MediaType的配置,我们之前的基础应用的例子是配置的前两个属性。routes
是一个列表,对应的对象属性是路由定义RouteDefinition
;defaultFilters
是默认的路由过滤器,会应用到每个路由中;streamingMediaTypes
默认支持两中类型APPLICATION_STREAM_JSON
和TEXT_EVENT_STREAM
。
- 点赞
- 收藏
- 关注作者
评论(0)