【Spring Cloud】failed to req API:/nacos/v1/ns/service/list after all servers([localhost:8848]) tried

问题描述

最近,在gitee上找了一个Spring Cloud项目进行学习,项目使用了Spring Cloud Alibaba Nacos作为服务发现,由于之前经常使用Nacos,所以在简单对项目配置文件进行了修改后,便进行项目启动测试,结果报了以下错误信息:

com.alibaba.nacos.api.exception.NacosException: failed to req API:/nacos/v1/ns/service/list after all servers([localhost:8848]) tried: java.net.ConnectException: Connection refused: connect
	at com.alibaba.nacos.client.naming.net.NamingProxy.reqApi(NamingProxy.java:556) ~[nacos-client-1.4.1.jar:na]
	at com.alibaba.nacos.client.naming.net.NamingProxy.reqApi(NamingProxy.java:498) ~[nacos-client-1.4.1.jar:na]
	at com.alibaba.nacos.client.naming.net.NamingProxy.reqApi(NamingProxy.java:493) ~[nacos-client-1.4.1.jar:na]
	at com.alibaba.nacos.client.naming.net.NamingProxy.getServiceList(NamingProxy.java:481) ~[nacos-client-1.4.1.jar:na]
	at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:502) ~[nacos-client-1.4.1.jar:na]
	at com.alibaba.nacos.client.naming.NacosNamingService.getServicesOfServer(NacosNamingService.java:490) ~[nacos-client-1.4.1.jar:na]
	at com.alibaba.cloud.nacos.discovery.NacosServiceDiscovery.getServices(NacosServiceDiscovery.java:69) ~[spring-cloud-starter-alibaba-nacos-discovery-2.2.4.RELEASE.jar:2.2.4.RELEASE]
	at com.alibaba.cloud.nacos.discovery.reactive.NacosReactiveDiscoveryClient.lambda$getServices$1(NacosReactiveDiscoveryClient.java:75) ~[spring-cloud-starter-alibaba-nacos-discovery-2.2.4.RELEASE.jar:2.2.4.RELEASE]
	at reactor.core.publisher.FluxDefer.subscribe(FluxDefer.java:46) ~[reactor-core-3.4.1.jar:3.4.1]
	at reactor.core.publisher.FluxSubscribeOn$SubscribeOnSubscriber.run(FluxSubscribeOn.java:193) ~[reactor-core-3.4.1.jar:3.4.1]
	at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:84) ~[reactor-core-3.4.1.jar:3.4.1]
	at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:37) ~[reactor-core-3.4.1.jar:3.4.1]
	at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_331]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) ~[na:1.8.0_331]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) ~[na:1.8.0_331]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_331]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_331]
	at java.lang.Thread.run(Thread.java:750) ~[na:1.8.0_331]

我的相关配置写在了bootstrap.yml文件里
在这里插入图片描述

原因分析:

由于是第一次遇到上述问题,而且之前这样写也没有任何问题,所以一时间不知道问题出在哪里,于是在网上对此问题进行了相关搜索,大概总结出了以下几类原因

原因一:nacos本地缓存没有更新,还沿用之前nacos未能正确启动的缓存

在这里插入图片描述

原文链接:https://blog.csdn.net/LeslieTsai2019/article/details/118607879

原因二:nacos未启动

在这里插入图片描述
原文链接:https://www.cnblogs.com/liqinzhen/p/13754581.html

原因三:bootstrap.yml文件没有被加载

前两个原因我都进行了分析并测试,不能解决我项目的问题。于是我只能通过源码来进行分析,分析前先贴出我项目里的配置文件。

在这里插入图片描述
在我的项目里有applicatrion.ymlbootstrap.yml两个配置文件,在Spring Boot中,bootstrap.yml是优先于applicatrion.yml加载的,所以我找到nacos项目里的配置类,通过代码走查的方式检查两个配置文件是否有加载,结果发现applicatrion.yml加载了,而bootstrap.yml没有被加载,导致nacos的服务地址使用的还是默认地址。
在这里插入图片描述
在这里插入图片描述
所以在本项目中,bootstrap.yml没有被加载才是问题产生的原因。


解决方案:

知道问题的产生原因后,问题就很好解决了,只需要知道bootstrap.yml为什么不加载就能解决,于是在网上搜索相关问题后才知道,bootstrap.yml不加载可能是因为缺少以下依赖,在pom.xml文件加上以下依赖即可解决。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

测试发现,bootstrap.yml确实加载了

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值