十九、SpringCloud Alibaba Nacos服务注册和配置中心(三) Nacos作为配置中心
1 Nacos作为配置中心 - 基础配置
① 新建工程演示nacos作为服务配置中心
② pom文件
<dependencies> <!--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> <!--web + actuator--> <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> <!--一般基础配置--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
③ yml文件
【注意】这里需要两个配置文件 application.yml , bootstrap.yml
为什么需要两个配置文件?
Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置
之后,才能保证项目的正常启动
SpringBoot中配置文件的加载时存在优先级顺序的,bootstrap优先级高于application
bootstrap.yml
# nacos配置 server: port: 3377 spring: application: name: nacos-config-client cloud: nacos: discovery: server-addr: localhost:8848 #Nacos服务注册中心地址 config: server-addr: localhost:8848 #Nacos作为配置中心地址 file-extension: yml #指定yaml格式的配置
application.yml
spring:
profiles:
active: dev # 表示开发环境
#active: test # 表示测试环境
#active: info
④、主启动类
@EnableDiscoveryClient @SpringBootApplication public class NacosConfigClientMain { public static void main(String[] args) { SpringApplication.run(NacosConfigClientMain.class,args); } }
⑤、业务类验证
@RestController @RefreshScope //支持Nacos的动态刷新功能 public class ConfigClientController { @Value("${config.info}") private String configInfo; @GetMapping("/config/info") public String getConfigInfo(){ return configInfo; } }
⑥、在Nacos中增加相应的配置
【注意】Data ID的名称如何设置?
${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
prefex默认为spring.application.name
spring.profile.active 即为当前环境对应的profile,可以通过spring.profile.active来配置
file.exetension 为配置内容的数据格式,可以通过spring.cloud.nacos.config,file-extension来配置
⑦、测试
访问http://localhost:3377/config/info,出现Nacos上配置的配置,说明Nacos成功作为配置中心
对服务提供配置
2 Nacos作为配置中心 - 分类配置
1)Nacos作为配置中心存在的问题
问题1:
实际开发中通常会为一个系统准备
dev开发环境
test开发环境
prod开发环境
如何保证环境启动时服务能正确读取到 Nacos相应环境的配置文件呢
问题2:
一个大型的分布式微服务系统会有很多微服务子项目,
每个微服务项目又会有相应的开发环境,测试环境,预发环境,正式环境
那么怎么对这些微服务配置进行管理呢?
2)Nacos的图形化管理界面
配置管理:
命名空间
3)Namespace、Group 、 Data ID 三者之间的关系
a、是什么?
类似于java中的package名和类名,最外层的namespace是用于区分部署环境,Group 和 Data ID逻辑上区分两个目标对象
b、三者关系
默认情况:
Namespace = public | Group = DEFAULT_GROUP | 默认Cluster是 DEFAULT
Nacos默认的命名空间是public ,Namespace主要用来实现隔离。
比如说我们现在有三个环境:开发、测试、生产环境,我们可以创建三个Namespace,不同的Namespace之间是隔离的
Group默认是DEFAULT_GROUP,Group可以吧不同的微服务划分到同一个分组中
Service就是微服务;一个Service可以包含多个Cluster,Nacos默认的Cluster是DEFAULT,Clusters是对指定微服务的一个虚拟划分。比如说为了容灾,将Service微服务分别部署在了杭州机房和广东机房
这时可以给杭州机房的service微服务起一个集群名称HZ
给广州机房的service微服务起一个集群名称GZ,还可以尽量让同一个机房的微服务相互调用,以提升性能
c、如何配置 Group 和 Namespace
server: port: 3377 spring: application: name: nacos-config-client cloud: nacos: discovery: server-addr: localhost:8848 #Nacos服务注册中心地址 config: server-addr: localhost:8848 #Nacos作为配置中心地址 file-extension: yaml #指定yaml格式的配置 group: DEV_GROUP namespace: 7d8f0f5a-6a53-4785-9686-dd460158e5d4 #命名空间ID