Spring Cloud Gateway 解析——初始化配置

举报
qingting-fly 发表于 2021/01/18 14:53:18 2021/01/18
【摘要】 作为系统的统一入口,API网关可提供请求路由与组合、协议转换、安全认证、服务鉴权、流量控制与日志监控等服务。当企业将所有的应用使用微服务的架构管理起来,那么API网关就起到了微服务网关的作用。 而当企业只是将系统与系统之间的调用使用REST方式进行访问时使用API网关对调用进行管理,那么API网关起到的就是API服务治理的作用。请求到来,网关是如何处理的呢?我们看一下如下的处理流程图。请求发...

作为系统的统一入口,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是一个列表,对应的对象属性是路由定义RouteDefinitiondefaultFilters是默认的路由过滤器,会应用到每个路由中;streamingMediaTypes默认支持两中类型APPLICATION_STREAM_JSONTEXT_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是一个列表,对应的对象属性是路由定义RouteDefinitiondefaultFilters是默认的路由过滤器,会应用到每个路由中;streamingMediaTypes默认支持两中类型APPLICATION_STREAM_JSONTEXT_EVENT_STREAM

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。