Nacos 的含义是 Dynamic Naming and Configuration Service。
官方介绍:Nacos 是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos 就是注册中心 + 配置中心的组合,例如 Nacos = Eureka + Config + Bus 或 Nacos = Spring Cloud Consul。
Nacos 可以替代 Eureka\Consul 做微服务注册中心,也可以替代 Config+Bus/Consul 做服务配置中心和满足动态刷新广播通知。
可以通过源码或发行包两种方式来获取 Nacos
下载完成后,点击 bin 目录下的 startup.cmd 启动或 bin 目录 cmd 启动命令窗口输入 startup.cmd -m standalone 启动(个人测试单机模式)。
启动后访问 http://127.0.0.1:8848/nacos 即可。若存在登录界面,则账户密码均为 nacos。
退出 Nacos 的方式是在命令窗口使用 ctrl + C。
在使用 Nacos 的模块中添加依赖(在父工程 pom 中添加版本)
<!--nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
替换 yml 文件的 spring 中与 consul 相关的内容
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
修改完毕后启动项目,即可在 Nacos 中看到该模块。同时 Nacos 支持负载均衡,测试过程和前文几乎相同。
前文提到的 Consul 8500 服务配置动态变更可以被 Nacos 替代。
通过 Nacos 和 Nacos Config 实现中心化全局配置的动态变更。
前文模块使用次数多,内容过多,重新创建一个干净的模块做演示。
创建一个服务方模块,引入依赖
<dependencies>
<!--cloud-bootstrap-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!--nacos-config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--nacos-discovery-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
application.yml 指明端口号及相关配置,bootstrap.yml 如下
# nacos
spring:
application:
name: nacos-config-client
profiles:
active: dev # 表示开发环境 prod表示生产环境 test 表示测试环境
cloud:
nacos:
discovery:
server-addr: http://127.0.0.1:8848 # 配置中心地址
config:
file-extension: yaml
server-addr: http://127.0.0.1:8848 # 配置中心地址
修改该模块的启动类后(按前文的方式),新建业务代码(内容来源为 Consul 演示时的示例)
@RestController
@RefreshScope // 注解含义:使当前类下的配置支持Nacos的动态刷新功能
public class NacosConfigClientController {
@Value("${config.info}")
private String info;
@PostMapping("config/info")
public String getConfigInfo() {
return info;
}
}
在配置 Nacos 之前,我们需要了解 Nacos 是如何配置参数的。Nacos 在可视化界面中的配置管理-
配置列表选项中,存在一个名为 DataId 的配置项,该配置项 Nacos 官方有明确的介绍。
nacos配置中心dataid 命名规则建议 nacos-opensource | Nacos
在官方的建议中:
${应用名} 表示配置中 spring-application-name 的服务名;
${环境标识} 表示配置中 spring-profiles-active 的环境标识名;
${模块名} 表示当某个模块需要特别标记时加入命名;
后缀表示 spring-cloud-discovery-config-file-extension 的配置格式。
由上述的四个名称 + 横线(减号)组成一个完整的 DataId 命名。
不建议个人随意修改命名,不建议个人随意修改命名,不建议个人随意修改命名。
我们点击配置管理-配置列表-创建配置后,填入相关内容
Data ID 按照 Nacos 的命名规范填写;
Group 默认;
配置格式 YAML;
配置内容按照测试类的层级进行填写
config:
info: hello nacos
配置完成后,配置完成后启动该模块,访问 /config/info 路径,可以获取返回信息 'hello nacos'。
当然,我们在业务类添加了 @RefreshScope 注解后,可以动态的修改 Nacos 的配置内容,再次访问可以获取不同的返回信息。
Nacos 的配置会记录历史版本,默认保留 30 天,也包含了一件回滚功能,速通笔记仅作了解此处不深入介绍。
在多环境、多项目管理的场景下,如何保证服务能够正确读取到相应环境的配置呢?Nacos 的数据模型由三元组唯一确定(namespace、Group、DataID)。
namespace 可以理解为 Java 中的包名,命名空间可以用于区分部署环境,而 Group 和 DataID 在逻辑上区分对象。命名空间默认 public,组默认 DEFAULT_GROUP , 而 DataID 则根据不同子项目变化。
从使用上来说,namespace 用作隔离,不同 namespace 代表了不同的项目配置划分(生产环境和开发环境做区分), Group 用作分组,表示哪一些微服务间可以相互访问,DataID 则代表了每一个微服务的独立 id。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。