#springboot version 3.3.3
#spring-cloud version 2023.0.3
问题描述:
今天在学习spring cloud gateway 的时候,再写路由重写的时候发现gateway会报
No servers available for service ,而且这会导致前端报503 Service Unavailable,我花了好长时间处理这个问题,下面分享一下我的处理办法。
可能原因:
1、Spring Cloud 2020版本以后,默认移除了对Netflix的依赖,其中就包括Ribbon,官方默认推荐使用Spring Cloud Loadbalancer正式替换Ribbon,并成为了Spring Cloud负载均衡器的唯一实现。
解决办法:只需要在gateway下面添加spring-cloud-starter-loadbalancer依赖即可
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
2、 nacos不支持不同命名空间之间的服务通信,这也会导致503 Service Unavailable,因此无论怎么调整依赖都没有(大坑)。
解决办法:将服务放到和gateway一样的命名空间即可
3、依赖版本对应不上
解决办法:在gateway中导入dependencyManagement,能保证依赖之间的版本对应上,想要什么依赖,添加就完了,不用考虑版本。
<!--这里指定版本-->
<properties>
<java.version>17</java.version>
<spring-cloud.version>2023.0.3</spring-cloud.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>