自己挖了个SpringCloud Gateway的坑
目录
1.背景
就是想用一把SpringCloud Gateway~~
2.环境
SpringBoot | 2.1.2.RELEASE |
SpringCloud | Greenwich.SR1 |
Gateway | 2.1.2.RELEASE |
3.坑
自己模拟的微服务工程,结构是这样的:
-
-- 祖工程
-
-- 父工程
-
-- 孙工程1
-
-- 孙工程2
-
-- 孙工程3(网关服务) // 坑
因为理解网关也是同其余业务一样,是一个微服务工程,所以就把网关也做到了孙工程里(这一开始开始挖,就整了个大坑~~~)。然后开始按照通常配置:
-
spring:
-
application:
-
name: gateway-service
-
cloud:
-
gateway:
-
discovery:
-
locator:
-
enabled: true
-
routes:
-
- id: user-service
-
uri: lb://user-service
-
predicates:
-
- Path=/user/**
怎么得都调不通~~
4.爬坑历程
1)第一次爬坑
无法启动,出现类似报错:
-
Description:
-
-
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.
-
-
Action:
-
Consider defining a bean of type "org.springframework.http.codec.ServerCodecConfigurer" in your configuration.
按照网上说的,去掉两个包依赖。能正常启动了,暂时出坑~~
-
<dependency>
-
<groupId>org.springframework.cloud</groupId>
-
<artifactId>spring-cloud-starter-gateway</artifactId>
-
<exclusions>
-
<exclusion>
-
<groupId>org.springframework.boot</groupId>
-
<artifactId>spring-boot-starter-web</artifactId>
-
</exclusion>
-
<exclusion>
-
<groupId>org.springframework.boot</groupId>
-
<artifactId>spring-boot-starter-webflux</artifactId>
-
</exclusion>
-
</exclusions>
-
</dependency>
2)第二次爬坑
以为是自己的配置问题。因为注册中心中,服务名是大写的,看度娘说,需要加参数,于是:
-
spring:
-
application:
-
name: gateway-service
-
cloud:
-
gateway:
-
discovery:
-
locator:
-
enabled: true
-
lower-case-service-id: true // 第一次爬坑高度线。表示将请求中服务名改小写
-
routes:
-
- id: user-service
-
uri: lb://user-service
-
predicates:
-
- Path=/user/**
3)第三次爬坑
因为访问接口时一直报404,所以以为是自己的uri哪里没写对(也不知道自己为什么就自动觉得uri有问题,如果uri有问题,不是应该是报类似router错误么~~)。于是:
-
spring:
-
application:
-
name: gateway-service
-
cloud:
-
gateway:
-
discovery:
-
locator:
-
enabled: true
-
lower-case-service-id: true // 第一次爬坑高度线。表示将请求中服务名改小写
-
routes:
-
- id: user-service
-
uri: lb://user-service
-
predicates:
-
- Path=/user/**
-
filters:
-
- StripPrefix=1 // 第二次爬坑高度线。路径截取个数。例如:上述访问如果是http://网关IP:网关PORT/user/xxx到了后端服务上就成了http://服务IP:服务PORT/xxx
4)第四次爬坑
从第三次到第四次中间爬了一小段~~以为是依赖包的版本匹配问题,所以各种调整依赖包版本,又回到了第一个坑~~这个时候也出现了一些曙光:发现所有父工程pom.xml中引入的依赖包也自动引入了到了网关工程里。这里就疑惑了,按照以往的逻辑,子工程不引入的话,父工程的包应该不会自动出现在子工程的依赖中的。开始怀疑,工程的位置~~
5)出坑
既然有许多其他无关依赖包,且排除也无效,那么调整工程结构试试~~
-
-- 祖工程
-
-- 网关服务 // 出坑
-
-- 父工程
-
-- 孙工程1
-
-- 孙工程2
调整工程结构以后,也不需要按照第一次爬坑中进行包的排除操作了。这里只引入了eureka和gateway的包即可
-
<dependencies>
-
<dependency>
-
<groupId>org.springframework.cloud</groupId>
-
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
-
<version>2.1.2.RELEASE</version>
-
</dependency>
-
<dependency>
-
<groupId>org.springframework.cloud</groupId>
-
<artifactId>spring-cloud-starter-gateway</artifactId>
-
<version>2.1.2.RELEASE</version>
-
</dependency>
-
</dependencies>
配置也做了相应的调整,这样简单配置也能够访问服务了
-
spring:
-
application:
-
name: gateway-service
-
cloud:
-
gateway:
-
routes:
-
- id: user-service
-
uri: lb://user-service
-
predicates:
-
- Path=/user/**
5.总结
虽然还是不完全理解为什么网关为什么不能和业务服务一级,也不太理解为什么使用filters的StripPreix时需要把Path增加一级路径/user-service,但现在起码能通了。
如有高手路过,还望能指点一二,感激涕零~~
6.参考资料
Spring Cloud Gateway -- 关于Path的配置 - 简书
springboot集成springCloud中gateway时启动报错的解决-云海天教程
SpringCloud Gateway配置自定义路由404坑
SpringCloud-Greenwich版本新特性探索(1)---SpringCloudGateway - 未分配微服务 - 博客园
Spring Cloud Gateway 多种思路实现动态路由 - 简书
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfjagfc
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13