【源码分析】Spring Cloud Gateway 启动时加载并缓存路由信息

在使用 Spring Cloud Gateway 进行路由转发时,它会在启动时就加载并缓存路由信息,以便在实际请求到来时能够快速进行路由转发。

那么,Spring Cloud Gateway 是如何完成这一过程的呢?让我们一起从源码中寻找答案。

一、创建 CachingRouteLocator

项目启动时,会创建一个名为 cachedCompositeRouteLocator ,类型为 CachingRouteLocator 的一个 RouteLocator 实现,如下所示:

org.springframework.cloud.gateway.config.GatewayAutoConfiguration

【源码分析】Spring Cloud Gateway 启动时加载并缓存路由信息

其中参数 routeLocators 为其他所有实现了 RouteLocator 接口的实例列表。

二、监听 ContextRefreshedEvent 事件

RouteRefreshListener 会监听到 Spring Boot 启动时发布的 ContextRefreshedEvent 事件。

org.springframework.cloud.gateway.route.RouteRefreshListener

【源码分析】Spring Cloud Gateway 启动时加载并缓存路由信息

然后调用 reset 方法,也就是发布了一个 RefreshRoutesEvent 事件。

【源码分析】Spring Cloud Gateway 启动时加载并缓存路由信息

三、加载路由

CachingRouteLocator 监听了 RefreshRoutesEvent 事件,调用 fetch 方法获取路由。

org.springframework.cloud.gateway.route.CachingRouteLocator

【源码分析】Spring Cloud Gateway 启动时加载并缓存路由信息
【源码分析】Spring Cloud Gateway 启动时加载并缓存路由信息

因为 CachingRouteLocator 中的委派对象 deledateCompositeRouteLocator 实例,见第一步。

所以最终是调用的是 CompositeRouteLocatorgetRoutes 方法去获取路由。

org.springframework.cloud.gateway.route.CompositeRouteLocator

【源码分析】Spring Cloud Gateway 启动时加载并缓存路由信息

由第一步创建 CachingRouteLocator 源码可知,CompositeRouteLocatordelegates 为其他所有实现了 RouteLocator 接口的实现列表,主要包含 RouteDefinitionRouteLocator 和 其他自定义 RouteLocator的实现。

org.springframework.cloud.gateway.route.RouteDefinitionRouteLocator

【源码分析】Spring Cloud Gateway 启动时加载并缓存路由信息

四、缓存路由

由第三步获取到所有的路由列表并排序后,直接放入缓存 cache

org.springframework.cloud.gateway.route.CachingRouteLocator

【源码分析】Spring Cloud Gateway 启动时加载并缓存路由信息

因为在 CachingRouteLocator 的构造函数中,将路由 routescache 进行了绑定,所以更新 cache 也就是更新了 routes

org.springframework.cloud.gateway.route.CachingRouteLocator

【源码分析】Spring Cloud Gateway 启动时加载并缓存路由信息

当请求进来的时候,直接返回 CachingRouteLocatorroutes,也就是缓存 cache 中的路由信息。

org.springframework.cloud.gateway.route.CachingRouteLocator

【源码分析】Spring Cloud Gateway 启动时加载并缓存路由信息

源码之下无秘密,以上四个步骤就是 Spring Cloud Gateway 在启动时加载并缓存路由信息的全部过程。

【源码分析】Spring Cloud Gateway 启动时加载并缓存路由信息


– End –


原文始发于微信公众号(i余数):【源码分析】Spring Cloud Gateway 启动时加载并缓存路由信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/194063.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!