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全家桶系列,包括监控治理等的实现。
感谢大家!
阅读更多- SpringCloud系列八:Zuul 路由访问(Zuul 的基本使用、Zuul 路由功能、zuul 过滤访问、Zuul 服务降级)
- SpringCloud系列:利用Zuul实现统一服务网关服务,简单实现IP白名单功能
- SpringCloud Gateway 路由网关
- Spring Cloud之搭建动态Zuul网关路由转发
- spring cloud : 网关Zuul(过滤:安全、监控、限流、路由)
- 网关 Spring-Cloud-Gateway 源码解析 —— 网关初始化
- .net framework 4.5 +steeltoe+ springcloud(一) 实现服务注册功能
- 网关 Spring-Cloud-Gateway 源码解析 —— 调试环境搭建
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(二十一):服务网关(Zuul)
- spring cloud快速入门教程(四)路由网关Zuul
- spring-boot-starter-zuul实现动态路由和过滤器功能
- 基于嵌入式linux路由转发功能的实现
- 网关 Spring-Cloud-Gateway 源码解析 —— 网关初始化
- Spring-Cloud-Gateway 源码解析 —— 路由(2.4)之 Kotlin 自定义 RouteLocator
- 网关 Spring-Cloud-Gateway 源码解析 —— 调试环境搭建
- solr系列三:solr和spring整合并实现增删改查功能
- Spring Cloud Gateway 接口文档聚合实现
- Ubuntu下利用双网卡实现网关路由和NAT功能
- 【原创】Linux实现路由转发功能开发总结
- springcloud项目网关升级:gateway替代zuul以及解决gateway跨域访问问题