eolinker / apinto

基于golang开发的网关。具有各种插件,可以自行扩展,即插即用。此外,它可以快速帮助企业管理API服务,提高API服务的稳定性和安全性。
https://www.apinto.com
Apache License 2.0
1.41k stars 206 forks source link

bug: nacos 注册发现节点失效无法移除或者节点更新 #148

Open bearboss opened 11 months ago

bearboss commented 11 months ago

Current Behavior

初始nacosip无法移除,且影响后续节点IP注册

Expected Behavior

节点状态和nacos上保持一致

Error Logs

2023-12-28T17:39:11.445+0800 INFO naming_grpc/naming_grpc_proxy.go:202 Close Nacos Go SDK Client... 2023-12-28T17:39:11.446+0800 INFO rpc/grpc_client.go:200 connectionId 1703756148420_10.51.144.170_61752 received error event, isRunning:false, isAbandon=false, error=rpc error: code = Canceled desc = grpc: the client connection is closing

Steps to Reproduce

  1. 建一个空的nacos- 2.2.3
  2. 启动apinto(0.15.7) - apinto-dashbaordv3(eolinker/apinto-dashboard:latest) , 然后新建服务发现指向nacosIP:8848, API集群等
  3. 启动java1注册nacos . 此时网关转发java1的路由是正常的
  4. kill -9 java1 此时nacoss上无java1实例. 网关转发java1路由报错 dial tcp4 192.168.137.102:7090: connect: connection refused ,理论上应该为 no vild node
  5. 再启动一个java2注册nacos , 此时就有问题了. java2可以转发, java1失败 . 就会有50%的请求异常
  6. 假设再启动一个java3注册nacos, 会发现java3启动成功,但是网关无法转发java3请求,也就是现在只轮询java1,java2
  7. 假设把java2 也 kill掉 . 那此时 java1 java2 会轮询显示connection refused. java3依旧无法路由
  8. 再增加一个java4注册nacos ,和java3一样,无法被转发

Environment

bearboss commented 11 months ago

image 问题是缓存的数据和nacos实际的状态不一致

Dot-Liu commented 7 months ago

该问题在v0.17.0已经修复,您可更新到相应的版本解决该问题