Skip to content

fix: 修复 switchServerAsync 在重连进行中导致的阻塞问题#867

Open
xiaomudk wants to merge 1 commit intonacos-group:masterfrom
xiaomudk:master
Open

fix: 修复 switchServerAsync 在重连进行中导致的阻塞问题#867
xiaomudk wants to merge 1 commit intonacos-group:masterfrom
xiaomudk:master

Conversation

@xiaomudk
Copy link

@xiaomudk xiaomudk commented Jan 5, 2026

fix #863

问题描述:
当网络故障发生时,reconnect 协程会进入长时间运行的 for 循环(可能持续数分钟)。
在此期间,任何对 switchServerAsync 的调用都会阻塞,因为 reconnectionChan(buffer=1)
已满。这会导致:

  • 业务线程在请求失败时挂起
  • 事件处理协程在 OnConnected 回调中阻塞
  • 网络恢复后系统仍需 2 分钟以上才能恢复

根本原因:
switchServerAsync 使用阻塞式发送(reconnectionChan <- ...),当 channel 满且
reconnect 还在处理时会无限期阻塞。

解决方案:
使用 select/default 实现非阻塞发送。当重连已经在进行中时,直接跳过新请求,
而不是阻塞等待。

@CLAassistant
Copy link

CLAassistant commented Jan 5, 2026

CLA assistant check
All committers have signed the CLA.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

生产环境nacos server异常时,触发reconnect,当nacos恢复正常时,服务未重新注册上

2 participants