Nacos简介
Nacos基于Java开发,全名为:Name Configurations 取其中 Na,Co,s 组成 Nacos。中文翻译为"命名配置"。其中Name全称为Name Server,表示命名服务。Configurations全称为Configurations Server,表示配置服务。
所以,可见Nacos主要提供了服务注册和服务配置管理两大功能,其中Name Server替换了Consul,Configurations Server替换了Spring Cloud Config + Spring Cloud Bus。
Nacos安装
-
环境准备
- 64位操作系统,支持Linux / Unix / Mac / Windows,推荐使用Linux。
- JDK 1.8 以上。
- Maven 3.2.x 以上。
-
-
Nacos目录
- bin:启动Nacos目录的脚本目录
- conf:Nacos的配置文件目录
- target:Nacos的依赖存放目录
- data:Nacos启动成功后保存数据的目录
-
启动Nacos单节点运行
Nacos默认是cluster模式(集群)启动,在一般小项目中,可以将Nacos设置为standalone(单节点)模式运行。在命令中添加 -m standalone 即可。
Linux/Unix/Mac OS启动:在nacos/bin目录下
./startup.sh -m standalone
Windows启动:在nacos/bin目录下
startup.cmd -m standalone
-
Nacos默认端口:8848
-
访问Nacos控制台:http://localhost:8848/nacos/ (用户名和密码默认都是nacos)
如果访问控制台显示空白,清理浏览器缓存即可。
Nacos客户端开发
-
在客户端pom.xml引入依赖
<!-- Nacos注册中心客户端 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!-- Nacos配置中心客户端 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
-
客户端添加启动类注解
@SpringBootApplication // Spring Cloud的原生注解,开启服务注册与发现,可加可不加 @EnableDiscoveryClient public class ClientApplication { public static void main(String[] args) { SpringApplication.run(ClientApplication.class, args); } }
-
Nacos控制台中确定存放配置文件的Namespace,如果没有需要创建(本文使用默认Namespace)。
-
在控制台预先创建好的的Namespace中创建配置文件client-dev.yml
server: port: 9000 spring: cloud: # Nacos配置 nacos: discovery: # 将client注册进入Nacos Server注册中心 server-addr: ${spring.cloud.nacos.server-addr}
-
客户端bootstrap.yml配置
本地配置的目的在于,能够在服务启动前找到远程配置中心对应的配置文件,所以本地配置了Namespace,Group,Data ID用来定位配置文件。
在Spring Cloud Alibaba中,虽然将本地配置放在application.yml也可以,但是还是建议放在bootstrap.yml中。
spring: # Data ID:前缀 application: name: client # Data ID:环境 profiles: active: dev cloud: nacos: # Nacos Server地址 server-addr: localhost:8848 # Nacos Server配置中心配置 config: # 服务启动时去Nacos Server配置中心拉取配置 server-addr: ${spring.cloud.nacos.server-addr} # 默认命名空间:Public,可以省略不写,新建的命名空间,需要使用命名空间ID,不能使用名称 namespace: Public # 默认组:DEFAULT_GROUP,如果是Public命名空间,则可以省略群组配置 group: DEFAULT_GROUP # Data ID:后缀 file-extension: yaml
-
成功注册服务
如果服务没有注册上,查看客户端的porn.xml中是否引入web依赖,或者尝试重启Nacos服务。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
Nacos配置中心功能
在前文实现的Spring Cloud 配置中心解决方案中,整合了Spring Cloud Config,Spring Cloud Bus,GitHub实现了配置中心和配置的自动自动刷新。其中GitHub作为一个配置远程仓库,Spring Cloud Config作为一个独立的配置管理Server管理本地配置的同时通过Webhock拉取远程仓库中的配置文件,从而实现配置的刷新,最后通过消息总线Spring Cloud Bus广播给每一个微服务实现配置的加载。
而在Spring Cloud Alibaba中提供的Nacos组件中实现了配置中心的功能,它不再依赖于类似于GitHub这样的远程仓库存储配置文件,而是直接存在Nacos Server上。也不再依赖Spring Cloud Bus结合消息中间件(RabbitMQ)更新配置,而是当Nacos Server上的配置文件被修改后,自动广播给各个微服务,从而也不需要独立的创建一个config服务。
配置的自动刷新
在Controller类上添加@RefreshScope注解
@RestController
// 实现配置自动刷新
@RefreshScope
public class TestController {
@Value("${user.name}")
private String username;
@GetMapping("/test")
public String test() {
System.out.println(username);
return username;
}
}
命名空间
因为Nacos中存储着所有微服务的配置文件,如果有两个微服务项目中都有user这个服务,那么必然会有两个user.yaml,这个时候必然会造成文件的冲突。所以Nacos提供了命名空间,给每一个项目单独设置一个命名空间,该命名空间中只存放对应项目的所有配置文件。Nacos默认提供的一个命名空间是public,该命名空间不能编辑不能删除,只能查看。所有未指定命名空间的配置文件会全部存储在public命名空间中。
命名空间的思想沿袭了在使用前文的Spring Cloud解决方案中,在GitHub上创建不同的仓库存储不同项目配置文件。
新建命名空间
每一个命名空间都会有一个唯一的ID,建议不填第一个框,自动生成ID。
命名空间名建议是英文。
添加单个配置
Data ID格式为:${prefix}-${spring.profiles.active}.${file-extension}
- prefix:前缀,默认为服务名,默认是bootstrap.yml中的spring.application.name,也可以通过spring.cloud.nacos.config.prefix来指定前缀。
- spring.profiles.active:环境,可以是dev,prod,test
- file-extension:文件后缀名,目前只支持yaml,properties(必须和下面选中的配置格式对应)
如果spring.profiles.active没有配置,那么Data ID格式为:${prefix}.${file-extension}
如果file-extension是yml,文件后缀必须是yaml,配置格式也必须选yaml。Nacos
1.4
之后,配置文件中必须写yml。
Group:默认DEAFAULT_GROUP,一般以环境dev,prod,test来分组(如果没有该组会直接创建)。
描述:配置文件的描述,可写可不写。
配置格式:必须和上面的file-extension一致。
Namespace,Group,Data ID就可以定于任何一个配置文件,类似于Maven对于Jar包的定位。
导入导出配置
导入配置:
导入的配置必须是一个zip包。
导出配置:
正常情况下导出的是一个zip后缀的压缩包,如果导出的是不是zip后缀的文件,则将后缀改为zip即可导入(仅限Chrome浏览器)。
克隆配置
克隆配置就是拷贝配置文件到另外一个Namespace,可以选择修改Group和Data ID。
历史版本
因为配置文件会进经常修改,Nacos中也沿用了类似与Git的方式,记录每一次的版本变更,方便做版本的回滚。
监听查询
可以对配置文件进行监听。其中,MD5是作为签名最好的方式。如果两个配置文件的内容是一样的,那么MD5是一样的。只要配置文件之间有一个字符不一样,MD5都不同。因此,Nacos判断配置文件有无更新就是判断两次修改后的MD5是否一致。当Nacos判断该配置文件发生内容上的变更,会立刻推向对应的微服务。