Spring Cloud 系列之 Spring cloud gateway 实现网关路由转发和过滤功能

       在Spring boot2.0版本发布之后,spring cloud又集成和开发了很多新的模块和功能;spring boot2.0和spring boot1.5的差别可以说是很大了。今天介绍一些spring cloud gateway,spring cloud自己的网关,在1.x版本中,大家使用的较多的是Zuul网关,但Zuul只是Spring cloud整合Netflix的,并不是它自己的。今天大家一起来感受一下Spring cloud gateway的强大之处吧!

        网关的功能和作用,在我看来大概分为两块:无外乎就是路由转发和过滤功能!在实际使用时,其实spring cloud gateway很简单,不过就是配置文件和配置类,但实际上Spring cloud gateway比Zuul实现了更强大的过滤器功能,而且支持WebSocket长连接,可以说是非常强大的功能了。

        需要集成的pom文件如下:感兴趣的同学可以去了解一下webflux,这也是颠覆了传统的web。eureka、openfeign、ribbon是项目中的注册中心和服务间调用所需要的jar包,与gateway本身无关。

         

1.路由转发:在这里建议大家配置路由写在yml文件中,不要硬编码在代码中,可扩展行较差,配置在yml文件中后,再配合spring cloud config可动态去改变自己的配置,所以本文使用的是yml配置的方式。如下:

          

我们一个个的来分析:

default-filters:  代表默认的过滤器,这是一个全局的过滤器,不属于任何一个route

discovery: locator: enabled: true   表示注册中心生效,我们可以通过注册中心的服务名进行路由转发

- id: auth-service   表示路由的唯一id

uri: lb://auth-service  指向注册中心的服务,使用lb:// 加上ServiceName,当然也可以通过http://localhost:8080指向

predicates:  表示要进行的断言

- Path= /auth/**  表示path地址,根据url,以auth开头的会被转发到auth-service服务,需要注意的是后面/**和/*的区别

filters:  毫无疑问就是过滤器了

- StripPrefix= 1 看单词的意思,从前面截取一个,实际上就是截取url,本例中就是会把/auth截掉,后面的部分才是转发的url

- Custom  这是个自定义的过滤器,在后面会详细解释

- name: Retry   看名字这就是个重试的嘛,下面就是它的参数了。

注意:我在使用的过滤器的时候,遇到一个小小的坑,就是配置 Host ,下图是官网对Host的解释:

我在配置的时候使用了  - Host=*  ,结果死活找不到,一直转发不成功404,大家仔细看下官网,并注意*和**的差别。

2.过滤器

        实际上上面这些过滤器都是spring cloud gateway 帮我们定义好的,不管是Retry还是StripPrefix,在所有的过滤器配置里,一定都能找得到RetryGatewayFilterFactory和StripPrefixGatewayFilterFactory,感兴趣的,可以去看下这些过滤器的源码,再来看一下刚才我们自定义的这个- Custom,就对应着我们自己写的过滤器CustomGatewayFilterFactory,继承AbstractGatewayFilterFactory<Object>父类,可在内部定义自己的过滤条件等等。如下图:

Spring cloud gateway 还像Zuul网关一样实现了全局过滤器,用法也是相同。如下图:

说明:其中有代码是调用其他服务进行token检验,实际大家根据自己业务场景来实现自己的全局过滤器和自定义过滤器就好了。

 

        Spring cloud gateway 分享到这,这些是我在使用过程中遇到的一些问题和注意点,希望对大家有一点点的帮助。后续还会继续分享一些我所使用和涉及的技术和问题。大概方向就是Spring Cloud 2.x全家桶系列,包括监控治理等的实现。
 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐