SpringCloud-Gateway源码笔记整理

网关的执行流程

  1. HttpWebHandlerAdapter: 构建组装网关请求的上下文。
  2. DispatcherHandler:所有请求的分处理器,负责分请求到对应的处理器。
  3. RoutePredicateHandlerMapping:路由断言处理器,用于路由的查找,以及找到路由后返回对应的WebHandler,

    DispatcherHandler会依次遍历HandlerMapping集合进行处理
  4. FilteringWebHandler:创建过滤器链,使用Filter链表处理请求。

    RoutePredicateHandlerMapping找到路由后返回对应的FilteringWebHandler后对请求进行处理。

    FilteringWebHandler 负责组装Filter链表并调用Filter处理请求。

DispatcherHandler的handler执行顺序

  1. 校验 handlerMapping
  2. 遍历 Mapping 获取 Mapping 对应的 handler(此处会找到gateway对应的 RoutePredicateHandlerMapping),

    并通过 RoutePredicateHandlerMapping 获取handler(FilteringWebHandler)。
  3. 通过 handler 对应的 HandlerAdapter 对 handler 进行调用(Gateway使用 SimpleHandlerAdapter),

    即 FilteringWebHandler 于 SimpleHandlerAdapter 对应。

RoutePredicateHandlerMapping 执行分析

  1. RoutePredicateHandlerMapping 的执行顺序是先通过路由定位器获取全部路由。
  2. 然后通过路由断言过滤掉不匹配的路由信息,找到路由信息后将路由信息设置到上下文中。
  3. 最后返回 Gateway 固定的 webHandler,即 FilteringWebHandler。

FilteringWebHandler 源码分析

  1. FilteringWebHandler 的执行顺序先构建一个包含全局过滤器的集合。获取上下文中的路由信息,

    然后将路由里的过滤器添加到集合中,对过滤器集合进行排序。
  2. 通过过滤器集合组装 Filter 链并调用 Gateway 默认的Filter链,最后通过过滤器来处理请求并转发到代理服务中。
  3. 通过 new DefaultGatewayFilterChain(combined).filter(exchange) 创建Gateway,默认过滤器链。
  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud Gateway 是一个基于 Spring Framework 5、Spring Boot 2 和 Project Reactor 的 API 网关服务。它提供了一种简单而强大的方法来路由和过滤请求,并将它们转发到底层的微服务。对于理解 Spring Cloud Gateway 的工作原理和深入研究其源代码是非常有用的。 首先,通过源码可以发现 Spring Cloud Gateway 主要由三个核心模块组成:路由模块、过滤器模块和事件模块。路由模块负责根据定义的路由规则将请求转发到特定的目标地址。过滤器模块负责在请求的不同阶段执行一系列的过滤器来处理请求。事件模块则用于处理与路由和过滤器相关的异步事件。 源码中的路由模块使用了 Reactive Streams API 中的 Flux 和 Mono 类来处理异步操作。它利用 RouterFunction 和 HandlerFunction 来定义路由和处理请求的方法,并通过 RoutePredicateFactory 来解析和匹配路由规则。在路由模块中,使用了 Netty 库来实现底层的网络通信和请求转发。 通过源码分析过滤器模块,可以发现 Spring Cloud Gateway 的过滤器分为全局过滤器和自定义过滤器两种类型。全局过滤器在请求的全局范围内应用,并且可以用于添加一些全局的处理逻辑。自定义过滤器则允许开发者根据需要添加自定义的过滤逻辑。过滤器的执行顺序可以通过 Order 注解来控制,以满足不同过滤器的执行顺序需求。 事件模块在源码中使用了 Reactor 提供的 EventProcessor 来处理与路由和过滤器相关的事件。它使用了 Reactor 的 FluxSink 和 MonoSink 来创建异步事件源,并通过事件处理器将事件发送给注册的监听器。通过查看事件模块的源码,可以更加深入地了解 Spring Cloud Gateway 是如何处理与路由和过滤器相关的事件的。 总结而言,通过源码分析 Spring Cloud Gateway,我们可以更好地了解其内部的工作原理和实现细节。这对于开发者来说是非常有用的,因为它可以帮助我们更好地使用和扩展 Spring Cloud Gateway 来满足不同的场景需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值