Spring Cloud Gateway 过滤器执行顺序详解

该文章已生成可运行项目,

在微服务架构中,API网关是一个关键组件,它不仅负责请求路由,还提供过滤器链来处理各种横切关注点。Spring Cloud Gateway 是一个基于 Spring Framework 5 和 Spring Boot 2 的 API 网关,它利用 WebFlux 反应式编程模型来构建非阻塞和高性能的 API 网关。本文将详细解释 Spring Cloud Gateway 中路由过滤器、defaultFilter 和全局过滤器的执行顺序。

一、过滤器类型

在 Spring Cloud Gateway 中,过滤器主要分为三种类型:

  1. 路由过滤器(Route Filter):与特定路由相关联的过滤器,用于处理特定路由的请求。

  2. 默认过滤器(Default Filter):Spring 框架提供的默认过滤器,用于处理所有路由的请求。

  3. 全局过滤器(Global Filter):全局应用于所有路由的过滤器,用于处理所有请求。

二、过滤器执行顺序

过滤器的执行顺序对于理解网关的行为至关重要。以下是过滤器执行顺序的规则:

  1. Order 值越小,优先级越高:每个过滤器都必须指定一个 int 类型的 order 值,order 值越小,优先级越高,执行顺序越靠前。

  2. order 值相同时:如果多个过滤器的 order 值相同,它们的执行顺序为:defaultFilter 最先,然后是局部的路由过滤器,最后是全局过滤器。

三、过滤器的合并与执行

请求进入网关后,会将当前路由过滤器、DefaultFilter 和 GlobalFilter 合并到一个过滤器链(集合)中,然后根据 order 值进行排序并依次执行每个过滤器。

过滤器适配

路由的过滤器、DefaultFilter 的本质是一样的,都是 GatewayFilter。而全局过滤器(GlobalFilter)则不同,它们需要通过一个适配器(GatewayFilterAdapter)来适配成 GatewayFilter,以便在网关中使用。

java复制

private static class GatewayFilterAdapter implements GatewayFilter {
    private final GlobalFilter delegate;

    GatewayFilterAdapter(GlobalFilter delegate) {
        this.delegate = delegate;
    }
    // 实现 GatewayFilter 的方法,委托给 GlobalFilter 执行
}

四、路由的过滤器,DefaultFilter,GlobalFilter为什么能放到一个集合当中?

路由的过滤器,DefaultFilter的本质是一样的,只不过作用的范围不一样,他们的本质都是GatewayFilter,全局过滤器可不是GatewayFilter,他们是有差别的,

在网关里面有一个过滤器适配器(GatewauFilterAdapter),这个适配器实现了GatewayFilter的接口,它的内部又接收了一个GlobalFilter,在这里会对GlobalFilter做一个适配,变成GatewayFilter去用,也就是说网关当中所有的GlobalFilter都会被适配成GatewayFilter,网关中所有过滤器最终都是GatewayFilter

五、总结

在 Spring Cloud Gateway 中,理解不同类型过滤器的执行顺序对于设计和优化网关至关重要。通过合理配置过滤器的 order 值,可以控制过滤器的执行顺序,从而满足不同的业务需求。同时,通过适配器将全局过滤器适配为路由过滤器,可以实现过滤器的统一管理和执行。

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值