spring-cloud-gateway网关服务遇到503
背景:使用spring-cloud搭建微服务网关时,使用nacos注册中心和配置中心,gateway动态加载路由配置,但是发现微服务在nacos注册成功,且路由配置中名称无误的前提下,出现使用网关访问时,报503错误。
配置如下:
#网关微服务配置 spring:
cloud:
nacos:
discovery:
server-addr: nacos注册中心ip:8848 # Nacos服务器地址
username: nacos
password: nacos
namespace: dev
group: DEFAULT_GROUP
ip: 192.168.1.2 #你的服务ip 测试可填写局域网1段ip
gateway:
discovery:
locator:
enabled: true # 启用服务发现方式的路由
config:
namespace: dev
group: DEFAULT_GROUP
server-addr: nacos配置中心ip:8848 # Nacos配置中心地址
file-extension: YAML # 配置文件的格式
name: gateway-routes # 配置文件的名称,注意要与 Nacos 中的文件名一致
#动态配置 配置中心路由规则文件 spring:
cloud:
gateway:
routes:
- id: op-web-route
uri: lb://op-web
predicates:
- Path=/op-web/**
filters:
- StripPrefix=1
loadbalancer:
ribbon:
eager-load:
enabled: true
retry:
enabled: true
其中op-web已经成功注册到nacos且名字对应正确,但是通过网关加服务的形式一直报503,通过服务本身地址能访问到,此时不禁想骂人。
然后,经过百度和ai的搜寻,找到了答案。
原因和解决:
在
Spring Cloud Gateway
中,当你使用 lb://
作为 uri
时,必须有一个负载均衡组件来解析它。lb://op-web
说明 Gateway 需要通过负载均衡找到 op-web
服务。lb://
解析失败。spring-cloud-loadbalancer
后(不再报 503)
org.springframework.cloud
spring-cloud-loadbalancer
这个依赖的作用是:
- 替代 Ribbon(Spring Cloud Netflix 组件已过时)
- 以前负载均衡用
spring-cloud-starter-netflix-ribbon
,但 Ribbon 已被官方废弃,Spring Cloud 推荐spring-cloud-loadbalancer
。
- 以前负载均衡用
- 解析
lb://op-web
spring-cloud-loadbalancer
负责把lb://op-web
解析成 Nacos 里的op-web
服务实例,然后进行负载均衡。
- 网关能找到可用服务
- 之前 503 是因为 网关找不到
op-web
,加上spring-cloud-loadbalancer
后,它能正确解析并调用op-web
。
- 之前 503 是因为 网关找不到
正文到此结束
- 本文标签: Spring
- 本文链接: https://www.kxop.top/article/44
- 版权声明: 本文由王开心原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权