微服务项目测试接口一次成功一次失败解决办法
博主在自己写项目时,之前测试成功的接口,在测试就发现失败了,在运行有成功了,我甚至都以为是apifox的问题,主要是一次成功一次失败真的很规律,第二次网关服务就报异常了,显示连接失败,下面就来讲讲其问题的根本所在。
服务注册中心注册的服务创建了两个实例,其中一个实例其实是无效的:
这是最可能的原因,尤其是在使用 IDE(如 IntelliJ IDEA)时
场景:你在 IDE 中点击了 Run
按钮启动你的 admin
服务。然后你可能在终端里用 mvn spring-boot:run
又启动了一次,或者不小心又点了一次 Run
,导致 IDE 在后台又启动了一个进程。
如何检查呢?比如nacos我打开我的服务列表,就会发现除了网关服务其它服务都是有着两个实例,其中一个其实是无效的
解决办法
一、删除无效的实例
我们可以点击详情,尝试下线无效的实例,但可能无法下线,会发生以下情况:
二、直接停止服务进程(根本方法)
- 去运行
admin
服务的那台服务器上,找到对应的Java进程并将其停掉。 - 一旦进程停止,它就无法再向Nacos发送心跳。
- 等待大约15-30秒,Nacos 的健康检查机制会发现这个实例失联,然后自动将其从服务列表中剔除。
- 当最后一个实例都被自动剔除后,这个服务自然就变成“空服务”了,这时你就能轻松删除它。
第二个最直接的方法,重启你的nacos服务,我是用docker执行的,所以直接重启nacos
容器,再次运行代码,再运行一次代码,就会重新创建一个正确的实例了。
为什么一次成功一次失败
因为nacos会进行负载均衡,一次转发给有效的实例,一次转发给哪个无效的实例,这样就出现了一次成功一次失败的情况
为什么那个实例无效呢,可能是关于配置相关的另一个不完善redis,mysql没链接上什么的,总之我是没有研究过的。