问题概述
关于这个问题,是在使用Spring Cloud的网关的时候遇见的,
微服务,多服务之间调用,报错:
“ NotFoundException: 503 SERVICE_UNAVAILABLE "Unable to find instance for ***" ”
解决办法
关于这个问题,团队架构师排查了好一阵,
首先是检查lb路由地址无误:
server:
port: 0000
spring:
main:
web-application-type: reactive
application:
name: app-name
cloud:
gateway:
routes:
- id: test-route01
uri: https://***
predicates:
- Query=login,ec
- id: test-route03
uri: https://***
predicates:
- Query=login,yuque
- id: admin_route
uri: lb://***
predicates:
- Path=/api/**
filters:
- RewritePath=/api/?(?<segment>.*), /app-name/$\{segment}
nacos:
discovery:
server-addr: ip:port
config:
import-check:
enabled: false
username: ***
password: ***
确定无误后,再其继续下面,
继续排查过程:
- 检查服务名称:确保 "server_name" 是正确的服务名称,没有拼写错误。
- 服务注册状态:确认提供 "server_name" 服务的实例是否已经正确注册到服务发现系统中。
- 网络问题:检查是否存在网络分区或防火墙设置导致无法访问服务实例。
- 服务发现系统健康状况:检查服务发现系统(如 Consul, Eureka, Zookeeper 等)的健康状况和日志,以确定是否存在问题。
- 重启服务:如果服务可能已经注册但无法被找到,尝试重启提供 "server_name" 服务的实例,并查看是否能够恢复。
- 配置检查:确保服务发现的配置是正确的,包括任何相关的配置设置。
- 服务网格配置:如果你使用的是服务网格(如 Istio),检查相关的配置和网格的健康状况。
- 服务实例数量:确认是否应有多个 "server_name" 服务实例,如果是,确保它们都已注册并正常运行。
- 如果以上步骤无法解决问题,可能需要更详细的系统和日志信息来进一步诊断问题。
最后,查询了官方文档,终于找到了答案,
如下图:
如上图,从官网得知,Spring Cloud 2020版本开始,弃用了Ribbon,开始以loadbalancer为代替组件,因此Spring Cloud Alibaba在2021版本nacos中删除了Ribbon的jar包,因此无法通过lb路由到指定微服务,出现了503情况。
需要通过显示配置loadbalancer依赖,解决lb路由问题。
<!--客户端负载均衡loadbalancer-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
<version>4.1.0</version>
</dependency>
显示添加依赖后,查看Maven
验证gateway,服务lb负载均衡调用,即可顺利调用了!
参考文献:
【Spring Cloud 2020.0.0-M1 Released】
好了,关于 NotFoundException: 503 SERVICE_UNAVAILABLE "Unable to find instance for ***" 的解决办法 就写到这儿了,如果还有什么疑问或遇到什么问题欢迎扫码提问,也可以给我留言哦,我会一一详细的解答的。
歇后语:“ 共同学习,共同进步 ”,也希望大家多多关注CSND的IT社区。
作 者: | 华 仔 |
联系作者: | who.seek.me@java98k.vip |
来 源: | 优快云 (Chinese Software Developer Network) |
原 文: | https://blog.youkuaiyun.com/Hello_World_QWP/article/details/141029160 |
版权声明: | 本文为博主原创文章,请在转载时务必注明博文出处! |