把分片数从 8 调到 16 后只改了配置中心,应用没重启,新订单仍然按旧规则写到 0 到 7 号片,8 到 15 号片一条数据都没有。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
curl -X POST http://localhost:8080/actuator/refresh curl http://localhost:8080/actuator/env | grep shard
分片规则在启动时读进内存并缓存,配置变更没有监听也没有刷新入口。配置中心显示已下发,应用侧用的还是启动时那份。这一点先确认清楚,后面就不用反复试。
「路由配置热更新」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。
具体做法是,给路由配置加变更监听 收到事件后重建分片规则;重建前先校验片数和数据源都在线;提供手动刷新接口 发布后调用一次确认版本号;新老规则并存一段时间 双读比对。
改完照着核一遍,刷新后新订单落到 8 到 15 号片 配置版本号与配置中心一致。
