SpringCloud-Alibaba 最新的 依赖版本管理组合以及 整合gateway遇到的问题
Posted 一个哈欠走天下
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud-Alibaba 最新的 依赖版本管理组合以及 整合gateway遇到的问题相关的知识,希望对你有一定的参考价值。
一般来说,cloud 与 alibaba 拥有版本组合说明文档wiki,不过这里可以做一个最新的组合的分享。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2020.0.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.4.6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
cloud: 2020.0.1
cloud alibaba: 2021.1
springboot: 2.4.6
spring-cloud-starter-openfeign: 3.0.3
spring-cloud-starter-loadbalancer: 3.0.3
再跟着官网整合 gateway的时候,启动网关报错。发现网关作为一个服务的入口对内进行访问肯定也是需要服务发现,那么也是需要远程调用服务的,于是就需要引入openfeign以及后面ribbon的替换 loadbalancer
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
都修改完毕之后,发现网关服务可以正常启动了,但是这个时候发现一件事,gateway 配置Path属性之后尝试不符合回报404,但是符合会报错503提示没有找到该服务。
经过百度了解到:
gateway 网关在发送请求之后会将Path后面的包含绝对匹配内容如/nacos-service/xxx 中的nacos-service也拼过去就会形成匹配到了,但是没有找到对应的服务接口导致gateway给予503没有可用资源。
yml 完整配置如下:
spring:
application:
name: gateway-test
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
gateway:
discovery:
locator:
enabled: true
lower-case-service-id: true
routes:
- id: feign-consumer
uri: lb://feign-consumer
predicates:
- Path=/consumer/**
filters:
- StripPrefix=1
- id: nacos-test
uri: lb://nacos-test
predicates:
- Path=/nacos/**
filters:
- StripPrefix=1
server:
port: 8888
id作为一个标识
uri是lb = loadbalancer的缩写,请求会自动负载均衡,nacos-test就是注册中心所在的服务注册中心的服务名称。
解决503匹配到对应的服务中心之后对应的RPC远程请求的时候会把/consumer
也给拼上去,导致资源找不到
解决办法有两个:
第一种:
是在网关以外的请求服务模块yml中新增一个server.servlet.context-path="/consumer"
这样在完整转发的时候就可以以资源开头作为统一的访问。
第二种:
是在网关的yml 配置匹配约束Path的时候,对请求资源完成一个过滤,
filters:
- StripPrefix=1
属性就可以解决,汉译:剥夺前缀。1就会剥夺前面的/consumer
而将后面的作为请求资源转发过去。
个人认为第二种比较合适一些。
以上是关于SpringCloud-Alibaba 最新的 依赖版本管理组合以及 整合gateway遇到的问题的主要内容,如果未能解决你的问题,请参考以下文章
SpringCloud-Alibaba系列教程2.搭建用户微服务模块
SpringCloud-Alibaba的Nacos究竟有多好用?
【SpringCloud-Alibaba系列教程】5.负载均衡