把 timeout 从 3000 改成 8000 发布,Nacos 控制台显示 3 个实例都已推送。实际只有 10.0.3.11 生效,另外两台日志里还是 read timeout 3000,重试两次才成功。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

curl 'http://nacos:8848/nacos/v1/cs/configs?dataId=order-service.yaml&group=DEFAULT_GROUP'
# 对比三台实例启动日志里的 namespace
grep -i 'refresh' /var/log/order-service/app.log | tail -20

@RefreshScope 加在了 Service 的实现类上,注入它的 Controller 持有的是启动时创建的代理对象,刷新后方法里取的还是旧字段。另外两台的命名空间和发布的那份也不是同一个。这一点先确认清楚,后面就不用反复试。

碰到「配置热更新未广播」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。

动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

具体做法是,RefreshScope 加在配置持有类 字段用 Value 直接注入;在刷新回调里打一条日志 带上实例 IP 和新值;核对三台实例的 namespace 和 group 是否一致。

改完照着核一遍,三台实例日志里都打印 timeout=8000,接口的超时时间在 5 秒内全部切换。

作者 9823189