GateWay 网关是 SpringCloud 官方推出并维护的网关中间件,其具有优越的性能,得到了业内的广泛肯定,我们在项目中也使用其作为我们的网关。
上图总结:
请求到达网关,网关利用断言判断请求是否符合路由规则,若符合,路由到指定地方。在路由到指定地方的过程中需要进行一系列的过滤器进行过滤。
在本节主要介绍如何实现使用 SpringBoot 框架整合 GateWay 实现到路由到指定位置
@EnableDiscoveryClient
注释,开启服务的注册与发现新建 bootstrap.properties 文件,加入如下配置
spring.application.name=mall-gateway # 此处添加你的项目名
spring.cloud.nacos.config.server-addr=127.0.0.1:8848 # 此处添加你的 Nacos 服务器地址
spring.cloud.nacos.config.namespace=2e7e2d21-70fd-4e1c-b24e-a1c9c94e63b4 # 此处添加你为该网关服务新建的命名空间 id (不重要,根据你的情况绝对要不要新建命名空间,不写使用使用默认的命名空间)
spring:
cloud:
gateway:
routes:
- id: baidu_route # 当前路由的 id
uri: https://www.baidu.com # 路由到的地址
predicates: # 路由断言,满足该断言才能路由到指定位置(断言为数组,因此使用 -)
- Query=url, baidu # Query 断言要求包含参数 url, 并且参数值匹配正则表达式
- id: qq_route # 测试二
uri: https://www.qq.com
predicates:
- Query=url, qq
在浏览器中输入如下 url 进行测试,表示包含参数url,并且参数的值为 baidu (注:我的项目启动端口号是 88, 你根据自己的启动端口号写就 ok )
踩坑:
报错:
Parameter 0 of method modifyRequestBodyGatewayFilterFactory in org.springframework.cloud.gateway.config.GatewayAutoConfiguration required a bean of type ‘org.springframework.http.codec.ServerCodecConfigurer’ that could not be found.
解决方式:
该错误是由于 gateway 和 spring-webmvc 不兼容导致的,在 pom 文件依赖中去掉 spring-webmvc 依赖,如果是引入的全局依赖,使用如下方式排除 spring-webmvc 即可
<dependency>
<groupId>com.wanqing.mallgroupId>
<artifactId>mall-commonartifactId>
<version>0.0.1-SNAPSHOTversion>
<exclusions>
<exclusion>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
exclusion>
exclusions>
dependency>
尾注: 蓝色是象征冷静的颜色,在一段时间的苦痛之后,我仿佛又活过来了,这一路,感谢支持我鼓励我的人陪伴,让我们大家一起加油!一个人的力量和渺小,但是一群人可以改变时间。当然回到这篇文章,如果有不明白的问题,欢迎大家评论交流,我看见了就会回复的,谢谢大家**