在前文已经介绍过,Nacos不仅可以用来做服务注册中心,也可以用来作为服务配置中心;本文就着重讲解Nacos配置中心
1.什么是配置中心?
在传统开发中,一个应用往往有很多的配置项;而在分布式微服务架构中,一个系统往往由多个微服务组成。而每个微服务的配置都不尽相同,传统模式下,修改配置文件还需要停止服务;修改之后,再重新启动;而在微服务架构下,如果配置文件改动较多;一次手动修改配置文件过多,且一个个停止再启动;操作过于麻烦而且容易出错。
配置中心的出现,就是来解决这个问题;将所需的配置文件都储存在Nacos上,服务启动之后自动从Nacos同步相应的配置;当需要修改服务配置时,只需要修改Nacos上相应的的配置文件即可。服务会自动同步配置,不需要重启服务。
2.配置文件匹配规则
Nacos作为服务配置中心,可以存储许多配置文件;而配置文件与服务之间有一套匹配规则
${preifx}-${spring.profile.active}.${file-extenion}
prefix
默认为spring.application.name
的值也就是服务名称,也可以通过spring.cloud.nacos.config.prefix
来指定spring.profile.active
为当前环境对应的profilefile-extenion
为配置文件的格式,服务中可以通过spring.cloud.nacos.config.file-extension
来配置,目前只支持properties
和ymal
类型
因此,匹配规则也可以改写为:
${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
3.演示
3.1 创建新Module: nacos-config-6001
3.2 引入依赖
<!-- Nacos 配置中心-客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- Nacos 注册中心-客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- web服务 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 监控当前应用的健康状态 Nacos 依赖于它 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
与前文相比,新增依赖spring-cloud-starter-alibaba-nacos-config
,其作用是将该服务作为Nacos注册中心的客户端
3.3 创建配置文件
bootstrap.yml
server:
port: 6001
spring:
application:
name: nacos-config
cloud:
nacos:
discovery:
server-addr: localhost:8848 # 将该服务注册到 Nacos 中
config:
server-addr: localhost:8878 # 关联配置中心,服务启动后从该地址拉取配置信息
file-extension: yaml # 拉取什么格式的配置文件,默认是properties
application.yml
spring:
profiles:
active: test
要从Nacos中拉取配置,服务必须先初始化完成,也就是完成服务注册等工作,bootstrap.yml
加载的优先级高于application.yml
,因此bootstrap.yml
中可以写项目初始化相关配置,而application.yml
中指定激活环境即可
如上例,spring.profiles.active=test
结合上文的匹配规则,指定服务启动之后从Nacos中拉取nacos-config-test.yaml
。
3.5 在Nacos中创建相应的配置文件
现在Nacos中的nacos-config-test.yaml
已经有config.info
配置项了
3.4 创建主启动类NacosConfig6001.java
@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfig6001 {
public static void main(String[] args) {
SpringApplication.run(NacosConfig6001.class,args);
}
}
3.5 创建ControllerNacosConfigController.java
@RestController
public class NacosConfigController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}
}
在上面的配置文件中我并没有写config.info
配置,而是在Nacos中;同时代码中创建一个接口/config/info
来获取config.info
配置项的内容,查看服务启动后是否拉取到了Nacos中的配置
@RefreshScope
注解实现配置的自动更新,也就是Nacos上的配置文件修改了之后,不需要重启服务就可以同步到最新的配置。
3.6 测试
启动该项目
访问http://localhost:6001/config/info
修改配置
访问http://localhost:6001/config/info
本人能力有限,本文只是我个人的技术分享。如有问题或错误之处;恳请大家不吝赐教。可以在公众号留言讨论;本人定虚心学习。