server.shutdown=graceful
spring.lifecycle.timeout-per-shutdown-phase=30s
curl -X PUT 'http://nacos:8848/nacos/v1/ns/instance/offline'

滚动发布时总有几笔请求报 connection refused,去看注册中心,已经停掉的实例还挂在列表里一分多钟才消失,用户那头就是白屏。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,进程收到停止信号直接退出,没有先把自己从注册中心摘掉,心跳要等好几个周期没上报才判不健康,这段时间流量还在往死实例上打。

「Nacos 下线实例残留」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

处理上按这个顺序:停机前先调注销接口把自己摘掉,等一个心跳周期再退出;打开框架的优雅停机,让它先把在途请求处理完;网关侧对连接拒绝做一次快速重试,兜住这个窗口期。

改完只确认一件事:发布过程中实例先消失再停进程,网关不再出现 connection refused,请求也没再报错。

作者 9823189