Spring Cloud 系列之 Spring cloud gateway 实现网关路由转发和过滤功能
发布日期:2021-09-18 00:51:44 浏览次数:10 分类:技术文章

本文共 1795 字,大约阅读时间需要 5 分钟。

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全家桶系列,包括监控治理等的实现。

 

转载地址:https://blog.csdn.net/yucaifu1989/article/details/105094470 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:springcloud Gateway 自定义过滤器例子
下一篇:Eclipse安装svn插件的几种方式

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年02月28日 15时30分57秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

java16下载_java lombok下载 2019-04-21
python 图像处理与识别书籍_Python图像处理之识别图像中的文字(实例讲解) 2019-04-21
java安全初始化_java安全编码指南之:声明和初始化 2019-04-21
java jstat gc_分析JVM GC及内存情况的方法 2019-04-21
php pclzip.lib.php,php使用pclzip类实现文件压缩的方法(附pclzip类下载地址) 2019-04-21
php dns更新,php_mzdns: 站群,大量域名 通过 dns 服务商 api 批量添加 ip 工具。你懂的~ 基于 mzphp2 框架。... 2019-04-21
jdk 1.8 java.policy,JDK1.8 导致系统报错:java.security.InvalidKeyException:illegal Key Size 2019-04-21
php linux权限,Linux权限详细介绍 2019-04-21
典型环节的matlab仿真分析,典型环节的MATLAB仿真.doc 2019-04-21
Php contenttype类型,各种类型文件的Content Type 2019-04-21
php使用redis持久化,redis如何持久化 2019-04-21
php7.1解压包安装,【Swoole】php7.1安装swoole扩展 2019-04-21
linux centos删除安装的包,CentOS yum认为已删除的软件包仍在安装中 2019-04-21
酒店管理系统c语言带注释,酒店管理系统--C语言版.pdf 2019-04-21
c语言 实现sizeof功能,C语言简单实现sizeof功能代码 2019-04-21
c语言sin函数近似值,用泰勒公式求sin(x)的近似值 2019-04-21
c 语言登录系统源代码,c语言源代码---------------个人图书管理系统 2019-04-21
android线程通信方式,Android 主线程和子线程通信问题 2019-04-21
cps1 cps2 android,图文教程:CPS1和CPS2模拟器使用 2019-04-21
在线设计 html5 表单,html5注册表单制作-表单制作-小程序表单制作 2019-04-21