Spring Cloud NacosNacos全称Dynamic Naming and Configuration Service,它可以用于RPC框架中服务的注册与发现也可以作为配置中心管理应用的配置.服务注册与发现使用过RPC框架同学对服务注册与发现并不陌生比如Dubbo默认使用Zookeeper作为注册中心完成服务的注册与发现而Nacos 同样可以充当注册中心的角色。Nacos 提供了多种健康检查机制确保请求总是被健康的服务器处理。配置管理Nacos 还可以作为配置中心在运行时动态修改配置而无需重启应用对于配置的修改进行历史版本管理便于回滚和审计。同时Nacos对多环境支持即不同的环境如开发、测试、生产有不同的配置Nacos 优势Nacos具有数据模型简单提供了简单便捷的控制台界面支持多种语言如 Java/Golang/Python等优势,使得在Spring Cloud 微服务组件中占有重要的一席之地Nacos 安装与使用jdk 安装 与配置Nacos 依赖JDK环境 建议使用JDK 1.8 安装完成配置好环境变量。Nocas 配置中心使用官网下载2.x版本本文下载的是nacos-server-2.4.3.tar.gzNacos 部署方式单机模式集群模式多集群模式解压后进入nacos/bin 目录 执行 -m standalone参数指定以单机模式部署。启动成功后输入http://ip:8848/nacos进入控制台可以在控制台进行配置的增删查改tar -zxvf nacos-server-2.4.3.tar.gz ./startup.sh -m standaloneNacos 接入Nacos 支持多种方式对接Open APIJava SDKNacos SpringNacos Spring BootNacos Spring CloudOpen API 方式可以通过CURL命令发送指定请求实现配置的增删查改获取配置请求URL/nacos/v1/cs/configs请求参数名称类型是否必须描述tenantstring否租户信息对应 Nacos 的命名空间ID字段。dataIdstring是配置 ID。groupstring是配置分组。通过CURL 查询配置curl -X GET http://127.0.0.1:8848/nacos/v2/cs/config?dataIdcodetonight.akgroupnacos-demonamespaceIdpublic返回{code:0,message:success,data:akserert123}发布配置请求 URL/nacos/v1/cs/configs请求参数名称类型是否必须描述tenantstring否租户信息对应 Nacos 的命名空间ID字段dataIdstring是配置 IDgroupstring是配置分组contentstring是配置内容typeString否配置类型通过CURL 发布配置curl -d dataIdnacos.example-d ‘groupDEFAULT_GROUP’-d ‘namespaceIdpublic’-d ‘contentcontentTest’-X POST ‘http://127.0.0.1:8848/nacos/v2/cs/config’Java SDK如果你的项目不是基于Spring Boot ,你也可以使用Nacos-client,当然这种方式使用起来就不那么优雅。如果你愿意也可以按照Open API格式构造Http 请求与Nacos交互,这也是Nacos 很容易支持其他语言的原因因为它支持Open API,其他语言只要构造对应的Http请求即可。Nacos-client 需要引入Pom依赖Java代码也很简单,这种使用方式比较少。dependency groupIdcom.alibaba.nacos/groupId artifactIdnacos-client/artifactId version${nacos.version}/version /dependency dependency groupIdorg.slf4j/groupId artifactIdslf4j-api/artifactId version1.7.36/version !-- 请替换为实际版本号 -- /dependency String serverAddr http://localhost:8848; String dataId nacos.example; String group DEFAULT_GROUP; Properties properties new Properties(); properties.put(serverAddr, serverAddr); ConfigService configService NacosFactory.createConfigService(properties); String content configService.getConfig(dataId, group, 5000); System.out.println(content); configService.addListener(dataId, group, new Listener() { Override public void receiveConfigInfo(String configInfo) { System.out.println(recieve1: configInfo); } Override public Executor getExecutor() { return null; } }); Thread.sleep(1000*3600);Nacos Spring CloudNacos Spring,Nacos Spring Boot 使用方式可以自行查看官方文档本文重点介绍Nacos Spring Cloud接入方式主要内容包含属性自动刷新多环境支持首先提个问题为什么需要配置中心传统的配置放到properties文件或者yaml文件中随着代码一起打包当需要修改配置时应用需要重启才生效。此外配置中包含一些敏感信息如果数据库用户名和密码这些配置放到 properties文件或者yaml文件存在安全隐患。 因此有了配置中心。配置中心配置优先级高于配置文件中配置DataIdSpring Cloud 中 dataId 格式${prefix}-${spring.profiles.active}.${file-extension}prefix如果不配置则值为spring.application.namespring.profiles.active即为当前环境对应的 profile 如果spring.profiles.active为空对应dataId 蜕化为prefix.{prefix}.prefix.{file-extension}file-exetension目前只支持properties和yaml类型配置示例一以下是Spring Cloud 一个简单配置,我们没有配置多环境那么对应的dataIdnacos-demo.properties# bootstrap.properties spring.application.namenacos-demo spring.cloud.nacos.config.server-addrhttp://127.0.0.1:8848 spring.cloud.nacos.config.namespacepublic spring.cloud.nacos.config.groupnacos-demo spring.cloud.nacos.config.file-extensionproperties多环境配置对应的dataIdnacos-demo-dev.properties# bootstrap.properties spring.application.namenacos-demo spring.cloud.nacos.config.server-addrhttp://127.0.0.1:8848 spring.cloud.nacos.config.namespacepublic spring.cloud.nacos.config.groupnacos-demo spring.cloud.nacos.config.file-extensionproperties #application.properties spring.profiles.activedev #application-dev.properties codetonight.usercodetonightjava 代码使用RefreshScope加在指定类上会自动刷新属性。本例中codetonight.user没有在配置中心配置因此取配置文件中值。codetonight.ak、codetonight.sk属于敏感信息我们将其放到配置中心达到安全管控目的。RestController RefreshScope public class NacosTestController { Value(value ${codetonight.ak}) private String ak; Value(value ${codetonight.sk}) private String token; Value(value ${codetonight.user}) private String user; GetMapping(/getInfo) public String getInfo(){ return ak token user; } }在Nacos控制台修改对应配置查询日志应用监听到变更再次请求配置已经生效总结Nacos 作为配置中心实现了配置的集中管理当配置更新时不需要重启应用立即生效同时配置的修改具有版本管理功能便于审计和回滚等操作。此外对于一些敏感信息放到配置中心通过权限控制增加安全性。