全部nacos笔记地址
nacos笔记(一)单机版
nacos笔记(二)注册中心
nacos笔记(三)配置中心
nacos笔记(四)集群与持久化
概念
概念就不多介绍了,看官网就够用了
nacos概念
如何安装和启动单机版nacos
nacos笔记(一)单机版
创建项目
创建这个项目是为了演示nacos的远程配置管理功能
项目名(随便起):cloud-alibaba-config-nacos-client3377
maven依赖
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<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>
</dependencies>
创建 bootstrap.yml
,因为bootstrap.yml的优先级是高于application.yml的,配置中心的相关就配置在这里
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: 192.168.0.116:8848 #nacos作为注册中心
config:
server-addr: 192.168.0.116:8848 #nacos作为配置中心
file-extension: yml #指定配置文件的格式
然后再创建application.yml
spring:
profiles:
active: dev
这里要先讲一下nacos的dataId,后面会用到
在 Nacos Spring Cloud 中,dataId 的完整格式如下:
${prefix}-${spring.profile.active}.${file-extension}
- prefix为项目名称
- spring.profile.active可以为环境(开发,测试,预生产,生产),本示例写在了application.yml中
- file-extension为文件格式
根据本项目的配置的配置文件在nacos上的的dataId如下
nacos-config-client-dev.yml
创建启动类
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigClientMain3377 {
public static void main(String[] args) {
SpringApplication.run(NacosConfigClientMain3377.class, args);
}
}
添加配置文件
打开nacos控制台,点击添加按钮
可以添加如下配置
- DataId就按照我们上述规则填写(文件格式也要手写)
- GROUP不修改的话默认是 DEFAULT_GROUP
- 配置格式选择yaml(好像旧版本的话在这里选yaml,文件格式就必须为yaml,但是我这个1.3.0是可以兼容yml的)
- 然后配置内容部分就写你的配置就可以了
到这里我们可以先简单的测试一下了
写一个controller来测试,使用@RefreshScope
来开启动态刷新配置的功能(PS:不需要使用BUS总线的感觉太爽了)
@RestController
@RequestMapping("/config")
@RefreshScope //支持Nacos的动态刷新功能
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/info")
public String getConfigInfo(){
return configInfo;
}
}
这个api的意思就是从配置文件中读取config.info
的内容
启动后访问:http://localhost:3377/config/info
成功读取
这个动态刷新是只针对当前类生效的,如果其他类也读取了这个配置但是没有添加添加@RefreshScope
注解,那么没有添加@RefreshScope
注解的类就不会刷新
命名空间和GROUP
在nacos中是有命名空间的概念的,官网介绍的领域模型如下
可以看出namespace > group > active
在上面的例子中,我没有修改命名空间和GROUP
- 默认的命名空间是 public
- 默认的 GROUP 为 DEFAULT_GROUP
添加命名空间
在控制台上点击 命名空间->新建命名空间
就可以创建命名空间了,我们只需要对名称和描述进行填写就行,id会自动生成,我这里创建了dev和test两个命名空间,又在dev中创建了几个配置文件,下面来看一下
在配置列表的头部就是创建过的命名空间,点击即可切换
创建配置文件
切换到dev后,创建配置文件nacos-config-client-dev.yml
,分组设置为DEV_GROUP
文件内容如图,下面就使用该文件文件来进行演示
首先复制一下dev这个命名空间的id,就在这个地方,或者到命名空间管理的列表也有
然后修改bootstrap.yml的配置,新添加了group和namespace的配置,其中namespace要用上面复制过来的id
变成如下
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: 192.168.0.116:8848 #nacos作为注册中心
config:
server-addr: 192.168.0.116:8848 #nacos作为配置中心
file-extension: yml #指定配置文件的格式
group: DEV_GROUP #使用group分组时需要的配置
namespace: e82192a0-4706-4f6c-9c24-c86e4e8b3060 #使用指定命名空间的文件
然后启动项目测试一下
返回结果符合预期
总结
根据nacos的领域模型,我们对于分环境的配置可以有以下三种方案
- 基于spring.profiles.active区分环境
- 基于GROUP来区分环境
- 基于namespace来区分环境
具体要使用哪种方式,亦或者采用混合的方式,都要看公司的规定和在实际工作中的具体需要
我认为是只采用其中的某一种方式是最好的,混合的话每次调试的时候切换环境都需要修改多个地方,比较容易遗漏