主题
Spring Cloud Gateway 503
问题描述
Spring Cloud Gateway 返回 503 Service Unavailable 错误。
问题原因
1. 缺少负载均衡组件
由于 Netflix 组件进入维护模式,Spring Cloud 2020.0.x 开始移除 Netflix 相关组件,当使用 lb://SERVICE 时,Spring Cloud Gateway 中由于缺少原有的 Ribbon 负载均衡组件,而导致服务不可用。
2. Nacos 服务发现配置错误
对于 Nacos 使用,如果对服务进行命名空间、服务组分类,导致不在同一个命名空间,或者在同一个命名空间不在同一个组的服务,无法被彼此发现,此时,网关也呈现出 503 Service Unavailable。
解决方法
方法一:添加负载均衡依赖
添加 spring-cloud-starter-loadbalancer 依赖来替代 Ribbon:
xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
<version>x.x.x</version>
</dependency>方法二:统一 Nacos 配置
使用 Nacos 时将微服务统一划归相同命名空间,相同服务组!
理解:
- 命名空间:管理多个项目属于一个命名空间
- 服务组:管理同一个项目多个微服务模块属于一个服务组
确保所有需要相互发现的服务都在同一个命名空间和同一个服务组中。
配置示例
Nacos 配置
yaml
spring:
cloud:
nacos:
discovery:
namespace: your-namespace-id
group: your-group-name
server-addr: localhost:8848Gateway 路由配置
yaml
spring:
cloud:
gateway:
routes:
- id: your-service
uri: lb://your-service-name
predicates:
- Path=/api/**确保 your-service-name 在 Nacos 中的命名空间和服务组与 Gateway 配置一致。
总结
503 错误通常是由于服务发现或负载均衡配置问题导致的。通过添加正确的负载均衡依赖和统一 Nacos 配置,可以有效解决此类问题。