前几章整合了Nacos、Dubbo、Sentinel,本章就gateway来进一步学习,原本在springcloud篇章有整合过gateway,但是当时的理解更肤浅,现在对gateway有了多一些的了解,在本章进行加深描述一下,下面开始。↓↓↓↓↓↓↓↓↓↓↓↓↓↓
qq交流群导航——>231378628
后面会通过详细的图解和文字来描述里面涉及到的参数以及路由流程。
目录
一、新建gateway子工程
二、引入依赖
三、改造gateway子模块
四、演示开启nacos注册中心路由功能效果
五、演示自定义路由配置效果
六、演示自定义不通过服务名进行路由
在前面章节里面,我们已经建了一个父子工程项目,这里直接接着整,新增一个子模块(demo-gateway),最终目录结构如下:
依赖问题解决后,就可以成功运行gateway模块了,前提是nacos已经开启了。
然后开始改造gateway,使之与其他模块构成关联,具体如下:
此处配置将当前模块跑到nacos注册中心,然后开启gateway的注册中心路由功能(后面演示两种gateway的路由功能)。
gateway可以通过routes和nacos的路由功能实现路由功能,现在展示一下nacos的路由功能效果。
通过如下方法开启的路由功能:
gateway: discovery: locator: enabled: true #开启注册中心路由功能
他的大概流程是这样的:
所以,在每次请求时请务必带上服务名,因为gateway需要去找nacos注册中心进行匹配。演示效果如下:
1、我运行了如下三个服务:
2、直接请求provider服务的接口:
3、通过网关请求provider服务的接口:
上面第四点演示了默认通过注册中心实现网关路由的功能,下面第五点演示不通过第四点,而是自己通过routes配置自定义的路由策略,如下:
注意:若要使用自定义配置,则“不能开启注册中心的路由功能”,否则自定义的策略会失效,学习时给我坑惨了,百度也没找到问题,解决注释了开启注册中心的路由功能的配置,自定义的配置就生效了。
先写一个配置,再进行描述,配置如下:
如上图所示,可以看到在routes里面,我新增了两组配置,里面涉及到了四个属性。
两组配置是针对consumer服务和provider服务的,后面测试就针对consumer服务进行测试。
针对id为consumer的配置,解读一下配置的流程:
1、首选gateway网关接受向他发来的请求。
2、他拿到请求去匹配路径中是否含有/nacos-consumer,如果含有就将请求路由到nacos-consumer服务,lb://表示开启负载均衡策略去路由。
3、路由之前拿到的路径可以看到(/nacos-consumer)正是目标服务的服务名,直接拿去请求肯定不行,路径不存在,所有需要先去掉这部分(/nacos-consumer)。
4、于是在filters中使用StripPrefix去截取第一部分,StripPrefix表示(请求中剥离的路径个数,从左到右),剩下的地址拿去请求就是正常的了。
流程图如下:
1、直接请求consumer服务的接口:
2、通过网关请求consumer服务的接口:
由此可见,自定义的配置是有效果的,在此再测试一下predicates是否起效果,修改配置如下:
从上面可以得知,我的目标服务是nacos-consumer,此处修改后的流程应该是,只有请求路径中包含nacos-consumer1111,才会路由到nacos-consumer这个地址,下面进行测试:
可见,现在访问同样的接口,gateway已经不给我们路由跳转了,说明predicates是有效果的,再测试filters是否起效果,如下请求:
我在filters中的配置就是,删除第一个路径,可见filters也是有效的。
为了加深一下自定义配置的用法,下面思考一下如何通过网关请求consumer服务的接口,在请求路径上不加上consumer的服务名,结果如下即可:
所以改造配置文件后,结果如下:
1、直接请求consumer服务的接口:
2、通过网关请求consumer服务的接口:
结果:只通过接口地址,通过网关访问目标服务成功。
本章讲解的是gateway对于断言(predicates)、过滤器(filters)的基本用法的事例,还有更多用法,可以面向百度继续学习。
————————————————————完毕————————————————————