Nacos 注册的实例有哪些默认属性?进程被杀之后多久下线?为什么引入 nacos-config 后应用启动就失败?配置修改多久生效、哪些 bean 会变?group 是怎么隔离的?这篇在自己起的 Nacos Server 3.1.1 上用 Spring Cloud Alibaba 2025.1.0.0 逐项实测。
Nacos 里 orders 的实例数 1;字段:ip=<本机局域网IP> port==应用端口 True ephemeral=True weight=1.0 healthy=True enabled=True clusterName=DEFAULT
实例的 metadata 键:['preserved.register.source'];metadata 里 preserved.register.source = SPRING_CLOUD
另一个服务通过 DiscoveryClient.getInstances("orders") 看到:[<本机局域网IP>:9602 metadata键=[nacos.cluster, nacos.ephemeral, nacos.healthy, nacos.instanceId, nacos.weight, preserved.register.source]]临时实例,weight 1.0,metadata 里有 preserved.register.source=SPRING_CLOUD。
SIGTERM(正常停机):0.6 秒后实例从 Nacos 里消失 SIGKILL(进程被杀,没机会注销):0.6 秒后实例从 Nacos 里消失
SIGTERM 与 SIGKILL 都是 0.6 秒。
往 Nacos 发布 orders.properties:{"code":0,"message":"success","data":true}
引入了 nacos-config 的 starter 但没有写 spring.config.import(默认检查打开):应用启动失败,提示 No spring.config.import property has been defined / Action: / Add a spring.config.import=nacos: property to your configuration. / If configuration is not required add spring.config.import=optional:nacos: instead. / To disable this check, set spring.cloud.nacos.config.import-check.enabled=false.
关掉检查(import-check.enabled=false)且没有 spring.config.import:greeting=local-greeting,local.only=yes,shared.key=null;app.msg:@RefreshScope=local-msg,普通单例=local-msg,@ConfigurationProperties=local-msg
spring.config.import=optional:nacos:orders.properties:greeting=nacos-greeting,local.only=yes,shared.key=from-nacos;app.msg:@RefreshScope=nacos-v1,普通单例=nacos-v1,@ConfigurationProperties=nacos-v1starter 要求 spring.config.import;远程覆盖本地。
改之前:greeting=nacos-greeting,local.only=yes,shared.key=from-nacos;app.msg:@RefreshScope=nacos-v1,普通单例=nacos-v1,@ConfigurationProperties=nacos-v1 发布新内容后 0.1 秒看到变化:greeting=nacos-greeting,local.only=yes,shared.key=from-nacos;app.msg:@RefreshScope=nacos-v2,普通单例=nacos-v1,@ConfigurationProperties=nacos-v2
服务端推送,RefreshScope 与 ConfigurationProperties 生效,普通单例不变。
同一个 dataId 在 group=TEAM_B 里发布 greeting=team-b-greeting:{"code":0,"message":"success","data":true}
默认 group 的客户端:greeting=nacos-greeting,local.only=yes,shared.key=from-nacos;app.msg:@RefreshScope=nacos-v2,普通单例=nacos-v2,@ConfigurationProperties=nacos-v2
spring.config.import=optional:nacos:orders.properties?group=TEAM_B:greeting=team-b-greeting,local.only=yes,shared.key=null;app.msg:@RefreshScope=team-b,普通单例=team-b,@ConfigurationProperties=team-bdataId + group 决定一份配置,互相隔离。