Spring Cloud Gateway源码解析
文章平均质量分 86
SCG版本为 v2.2.6.RELEASE版本
壹氿
做一个有准备的人吧~
展开
-
Spring Cloud Gateway源码解析-11-扩展RouteDefinitionRepository实现基于Redis的动态路由
由来在Spring Cloud Gateway源码解析-10-自定义Predicate实现黑名单中我们自定义了Predicate来实现黑名单,但发现每次更改黑名单规则都要重启项目来实现,因此需要将路由信息存储在外部数据源中,定时刷新SCG内存中的路由信息。思路在Spring Cloud Gateway源码解析-03-RouteDefinitionLocator、RouteLocator解析中我们已经介绍过RouteDefinitionRepository,该接口在SCG中只有一个实现InMemo.原创 2021-04-02 15:58:09 · 2113 阅读 · 12 评论 -
Spring Cloud Gateway源码解析-10-自定义Predicate实现黑名单
自定义Predicate思路在SCG初始化解析中我们已经知道了Predicate是怎么根据我们的配置装配的。以RemoteAddrRoutePredicateFactory为例。public class RemoteAddrRoutePredicateFactory extends AbstractRoutePredicateFactory<RemoteAddrRoutePredicateFactory.Config> RemoteAddrRoutePredicateFacto.原创 2021-04-01 14:03:15 · 1470 阅读 · 1 评论 -
Spring Cloud Gateway源码解析-09-结合注册中心实现动态路由
示例SCG配置spring: cloud: gateway: discovery: locator: enabled: true # 默认关闭 url-expression: "'lb://'+serviceId" #路由目标地址表达式,默认值就是"'lb://'+serviceId" #配置nacos注册中心 nacos: discovery: server-addr: 12.原创 2021-04-01 13:36:30 · 1153 阅读 · 0 评论 -
Spring Cloud Gateway源码解析-08-过滤器-GatewayFilter
SCG内置的GatewayFilter有三十余个,大概梳理了一个脑图出来,请各位看官老爷查看原创 2021-04-01 13:31:46 · 352 阅读 · 3 评论 -
Spring Cloud Gateway源码解析-07-过滤器解析之GlobalFilter
WebClientHttpRoutingFilter前言在**Spring Cloud Gateway源码解析-05-请求处理之FilteringWebHandler**中已经讲解过在获取过在DispatcherHandler通过RoutePredicateHandlerMapping获取到FilteringWebHandler后会调用FilteringWebHandler的handle方法。并且FilteringWebHandler中已经组合了当前路由的Filter和SCG全局的Filter。De.原创 2021-04-01 13:28:24 · 1030 阅读 · 0 评论 -
Spring Cloud Gateway源码解析-12-令牌桶限流(RequestRateLimiterGatewayFilterFactory)
SCG中默认使用了Redis来实现令牌桶限流,通过Java代码调用lua脚本实现。RequestRateLimiterGatewayFilterFactoryRequestRateLimiterGatewayFilterFactory是SCG的限流GatewayFilter的工厂public GatewayFilter apply(Config config) { KeyResolver resolver = getOrDefault(config.keyResolver, defaultKey原创 2021-04-23 20:11:48 · 631 阅读 · 0 评论 -
Spring Cloud Gateway源码解析-06-内置Predicate
SCG的Predicate是使用工厂方法模式来实现的,类关系如下。SCG包括了很多内置的Predicate工厂,如下在每个RoutePredicateFactory中都有一个Config类,该类用于存储对应RoutePredicate的配置AfterRoutePredicateFactory匹配请求时间满足在配置时间之后的请求。public class AfterRoutePredicateFactory extends AbstractRoutePredicateFactory<Af原创 2021-04-01 13:23:35 · 598 阅读 · 0 评论 -
Spring Cloud Gateway源码解析-05-请求处理之FilteringWebHandler
来源在**SCG初始化解析之Route、Predicate、Filter的构建原理中我们提到了**FilteringWebHandler会在GatewayAutoConfiguration中进行自动装配,并没有进一步阐述。@Beanpublic FilteringWebHandler filteringWebHandler(List<GlobalFilter> globalFilters) { return new FilteringWebHandler(globalFilters);.原创 2021-04-01 13:18:12 · 1042 阅读 · 0 评论 -
Spring Cloud Gateway源码解析-04-路由匹配RoutePredicateHandlerMapping
上篇文章我们了解了Route、Predicate、Filter是如何根据我们的配置创建的,这篇文章我们来继续了解SCG是如何处理我们的请求的。首先掏出来我们的祖传图,很关键。SCG是基于webflux的,webflux和springweb-mvc类似,通过HandlerMapping来接收处理请求。通过上图可以看到Client请求首先会到Gateway HanderMapping,那可以猜到这个HandlerMapping一定是webflux的HandlerMaping的实现类,这个GatewayHan原创 2021-04-01 13:15:15 · 1550 阅读 · 0 评论 -
Spring Cloud Gateway源码解析-03-RouteDefinitionLocator、RouteLocator解析
在**SCG初始化解析之Route、Predicate、Filter的构建原理中我们已经了解过RouteDefinitionLocator,**先来了解下这两个接口涉及的类关系。RouteDefinitionLocatorRouteDefinitionLocator接口中只有一个方法就是#getRouteDefinitions,通过方法名称可以看出来,该方法是用来获取所有的RouteDefinition的,在第一节我们了解到,路由信息可以从配置文件中来,并且对应的实现类为PropertiesRoute原创 2021-04-01 13:12:18 · 1214 阅读 · 0 评论 -
Spring Cloud Gateway源码解析-02-初始化解析之Route、Predicate、Filter的构建原理
在上篇文章中我们看到,通过配置如下配置即可对请求进行路由匹配过滤及转发,并且得知SCG内置了多种Filter和Predicate,通过类似- Path=/login或者- StripPrefix=1这种就可以匹配到SCG内置的PathRoutePredicateFactory和StripPrefixGatewayFilterFactory,那么SCG是怎么对我们的配置进行封装和匹配的呢?spring: cloud: #SCG的配置,对应GatewayProperties gateway:原创 2021-04-01 13:10:13 · 1437 阅读 · 0 评论 -
Spring Cloud Gateway源码解析-01-基本特性及核心概念
学习一个东西首先要了解它主要是做什么的,有什么特性,自己写一写小demo,然后以demo中的各个点分别进行深入和发散,上来就看源码很不现实,本文主要介绍SCG的基本的特性、概念及SCG整体的架构。SCG特性以下翻译自https://github.com/spring-cloud/spring-cloud-gateway#features基于Java8基于Spring5基于Spring2.0支持动态路由,能够匹配任何请求属性上的路由(Route)支持内置到Spring Handler映原创 2021-04-01 13:05:04 · 954 阅读 · 0 评论