粉丝59获赞42
在使用Spring Cloud Gateway网关时,遇到路由负载均衡配置失效的问题:当网关路由规则设置为基于服务名的动态转发时,访问目标服务会返回503错误,且网关无任何报错提示。但将路由路径写死为固定地址时可正常访问。
当网关路由直接指定固定路径(如写死转发地址)时,通过网关访问http://网关地址/ngcs/接口路径可成功转发至ngcs服务,返回接口定义的错误(如因GET请求访问POST接口导致的405 Method Not Allowed)。
改为负载均衡模式(通过服务名lb://ngcs转发)后,相同访问路径返回503 Service Unavailable,网关日志无任何异常输出。
Spring Cloud 2021.0.3版本后移除了默认集成的负载均衡依赖。在早期版本中,Spring Cloud Gateway自动集成Ribbon或LoadBalancer组件以支持服务名转发,但2021版本后将负载均衡功能独立为可选依赖。若未手动添加相关依赖,网关无法通过服务名发现目标服务,导致路由失败并返回503错误。
手动添加Spring Cloud LoadBalancer依赖,使网关具备服务名解析与负载均衡能力:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
确认服务注册状态:检查ngcs服务已成功注册到服务注册中心,网关可通过服务名(ngcs)查询到该服务实例。
配置动态路由规则:
spring:
cloud:
gateway:
routes:
- id: ngcs_route
uri: lb://ngcs # lb://前缀表示启用负载均衡,ngcs为目标服务名
predicates:
- Path=/ngcs/** # 匹配以/ngcs开头的请求路径
http://网关地址/ngcs/接口路径,此时请求会被动态转发至ngcs服务实例,返回与直接访问服务相同的结果(如参数错误或请求方法错误提示),表明负载均衡路由生效。Spring Cloud Gateway在2021.0.3及以上版本中,需显式添加spring-cloud-starter-loadbalancer依赖以支持基于服务名的负载均衡转发。缺少该依赖会导致服务发现失败,表现为503错误且无日志提示,需特别注意版本兼容性问题。
0