源码分析之Spring Cloud Gateway中filter是如何工作的

本文深入分析Spring Cloud Gateway(SCG)中filter的添加、排序和执行过程。首先,从如何添加filter入手,探讨filter的排序机制,通过源码发现filter的order值用于决定执行顺序。接着,详细阐述了filter如何通过filter chain进行执行,揭示了SCG利用反应式编程实现filter链的内部工作原理。
摘要由CSDN通过智能技术生成

简单起见,直接使用Spring Cloud Gateway(以下简称SCG)框架自带的spring-cloud-gateway-sample模块进行源码分析。

目标

分析如何添加filter,filter如何排序,filter如何执行

事先准备

参见源码分析之spring_cloud_gateway中请求被路由的过程解析 中的“准备工作”部分。

分析过程

SCG如何添加一个filter

我们回到最开始,本文示例代码中添加filter的代码如下:

	@Bean
	public RouteLocator myRoutes(RouteLocatorBuilder builder) {
   
		String httpUri = "http://httpbin.org:80";
		return builder.routes()
				.route(p -> p
						.path("/get")
                       //看看这里的源码
						.filters(f -> f.addRequestHeader("Hello", "World!!!"))
						.uri(httpUri)
				)
				.build();
	}

点下filters()方法,好像跟添加filter、filter排序关系都不大,暂时跳过:

	public UriSpec filters(Function<GatewayFilterSpec, UriSpec> fn) {
   
		return fn.apply(new GatewayFilterSpec(routeBuilder, builder));
	}

那再看下addRequestHeader, 明显这里就是添加filter、并涉及排序的代码了:

public class UriSpec {
   
    .......
    /*
     getBean方法来自UriSpec
        */
    <T> T getBean(Class<T> type) {
   
        return this.builder.getContext().getBean(type);
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值