spring-cloud-gateway之GatewayFilterFactory

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring-cloud-gateway之GatewayFilterFactory相关的知识,希望对你有一定的参考价值。

参考技术A 在前一篇 GlobalFilter 中剖析了gateway的全局过滤器的设计与实现;全局过滤器是针对于网关而言通用的功能组件实现,采用全局来实现。而对于有些非通用的功能或者面向用户自定义的功能采用全局过滤器实现显然是不合理的,基于此出发开源作者变换了思路,采用工厂模式来即时生产一个自定义或者配置的过滤器来过滤当前的请求。

gateway声明了一个工厂接口GatewayFilterFactory,此接口继承了ShortcutConfigurable,Configurable接口。默认不支持Configurable接口的操作,需要继承AbstractNameValueGatewayFilterFactory才具备Configuable接口行为。

Configurable接口是为了实现一些配置信息(key-value)的使用方便而声明的一个interface,具体作用体现在AbstractNameValueGatewayFilterFactory的子类实现中。

FunctionalInterface函数式接口声明注解,将GatewayFilterFactory声明为一个函数式接口。

ShortcutConfigurable是gateway实现的一个支持工具类,用于参数解析。包含两个枚举实现类, DEFAULT和GATHER_LIST,gateway默认使用的DEFAULT ;RouteDefinitionRouteLocator#lookup方法中解析断言参数时使用了此枚举解析;在RouteDefinitionRouteLocator#loadGatewayFilters方法中加载配置过滤器时也使用此枚举解析。

AbstractGatewayFilterFactory是GatewayFilterFactory接口的直接抽象实现类,作者意图在于实现扩展性,并且标明是一个会被release的类。

AbstractNameValueGatewayFilterFactory是AbstractGatewayFilterFactory的其中一个抽象子类,重点在于其泛型Config类是一个键值对类型的,被若干个键值对配置的子类继承,如AddRequestHeaderGatewayFilterFactory等。

AbstractChangeRequestUriGatewayFilterFactory是AbstractGatewayFilterFactory的另一个抽象子类,泛型参数与AbstractGatewayFilterFactory一致,只有一个参数名,实现类目前只有RequestHeaderToRequestUriGatewayFilterFactory。

gateway的过滤器工厂类不同于GlobalFilter,所有的过滤器工厂实现类均在GatewayAutoConfiguration中进行注入BeanFactory中,根据每个路由配置的具体gatewayFilter从beanFactory中获取工厂类进行配置并注入对应的RouteLocator;GatewayFilter和GlobalFilter一样最终被封装成OrderedGatewayFilter,然后为每个请求分配一个定制的GatewayFilterChain。

sentinal spring-cloud-gateway adapter(1.6)异常错误之@EnableCircuitBreaker

sentinal 大坑

使用gateway adaper包出现@EnableCircuitBreaker did you forget include starter的异常

这时候千万不要学我引入cloud的sentinal starter,因为写限流规则启动会发生异常

找不到methon,去掉以后会发生@EnableCircuitBreaker的异常,但这并不是feign或者openfeign的问题你改pox.xml排除和换版本是没用的

这!居!然!是!

@SpringCloudApplication和@EnabkeZuulProxy(如果你用zuul)的间接依赖问题!

临时解决方案:把@springcloudapplication换成@springbootapplication。

长期方案:等下一个版本。

差点没把我搞死。

以上是关于spring-cloud-gateway之GatewayFilterFactory的主要内容,如果未能解决你的问题,请参考以下文章

如何配置 spring-cloud-gateway 以使用 sleuth 记录请求/响应正文

无法根据活动的 Spring 配置文件生成不同的 spring-cloud-gateway 路由

Spring-Cloud-Gateway 创建的初始 Trace 都命名为“/”,无论路径如何

java学习---spring-cloud-gateway网关配置

如何在 spring-cloud-gateway 合约测试中从 spring-cloud-contract 中设置带有 StubRunner 端口的 url

spring-cloud-gateway使用https注意事项---设置证书和需要注意的问题