springcloudAlibaba_nacos 配置中心
基础配置演示
-
新建moudle,cloudalibaba-config-nacos-client3377
-
pom
1 2 3 4 5 6 7 8 9 10
<dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
-
yml
bootstrap.yml
1 2 3 4 5 6 7 8 9 10 11 12 13
server: port: 3377 spring: application: name: cloudalibaba-config-nacos-client3377 cloud: nacos: config: # 配置中心地址 server-addr: localhost:8848 # 指定配置格式yaml file-extension: yaml
application.yml
1 2 3
spring: profiles: active: dev
为什么要配置两个?bootstrap.yml 用作系统级资源配置项,application.yml 用作用户级的资源配置项。在项目中两者配合共同生效,bootstrap.yml 优先级更高
。 -
主启动
-
业务类
-
在Nacos中添加配置信息
在 Nacos Spring Cloud 中,
dataId
有明确的配置规则,官方也有说明。进入链接查看:官网链接。此处也做一点简单介绍。dataId
的完整格式如下:1
${prefix}-${spring.profile.active}.${file-extension}
prefix
默认为spring.application.name
的值,也可以通过配置项spring.cloud.nacos.config.prefix
来配置。spring.profile.active
即为当前环境对应的 profile。注意:当spring.profile.active
为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成${prefix}.${file-extension}
(建议:不要让spring.profile.active
为空,或许会有一些意外的问题)file-exetension
为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension
来配置。目前只支持properties
和yaml
类型。
-
验证,成功获取配置值&自带动态刷新(不需要webhook)
访问: http://localhost:3377/info
从nacos配置中心更新值,再次访问上面链接,可以看到配置已经生效了
分类配置
项目开发中,一定会遇到 多环境
、多项目管理
问题。遇到下面问题时,Nacos 基础配置显然无法解决这些问题,接下来就对 Nacos 命名空间
及 Group
相关概念做一些说明。
问题
问题1: 实际开发中,通常一个系统会准备 dev开发环境
、test测试环境
、prod生产环境
,如何保证指定环境启动时服务能够正确读取到 Nacos 上相应环境的配置文件?
问题2: 一个大型的分布式微服务系统会有很多个微服务子项目,每个微服务项目又都会有相应的 dev开发环境
、test测试环境
、预发环境
prod生产环境
等,那怎么对这些微服务配置进行管理呢?
Nacos的命名规则说明
Nacos 命名由 Namespace(命名空间)
+ Group(分组)
+ Data ID(实例ID)
三部分组成,类似于 Java 中的 package(报名) + class(类名)
方式。最外层 Namespace 用于区分部署环境;Group 和 Data ID 逻辑上用于区分两个目标对象。
默认情况下:Namespace = public,Group = DEFAULT_GROUP,Cluster=DEFAULT
Namespace
主要用来实现隔离,Nacos 默认的命名空间是 public
。比方说我们现在有三个环境:开发
、测试
、生产
环境,我们就可以创建三个 Namespace,不同的 Namespace 之间是隔离的;
Group默认是DEFAULT_GROUP,GROUP可以把不同的微服务划分到同一个分组里面去
Service就是微服务,一个 Service 可以包含多个 Cluster(集群),Nacos 默认 Cluster 是 DEFAULT,Cluster 是对指定微服务的一个虚拟划分。比方说为了容灾,将 Service 微服务分别部署在了杭州机房和广州机房,这时就可以给杭州机房的 Service 微服务起一个集群名称(HZ),给广州机房的 Service 微服务起一个集群名称(GZ),还可以尽量让同一个机房的微服务互相调用,以提升性能。
最后是Instance,就是一个个微服务实例。
DataId方案
指定spring.profile.active和配置文件的DataID来使不同环境下读取不同的配置
默认空间+默认分组+新建dev和test两个DataID
通过spring.profile.active属性就能进行多环境下配置文件的读取
application.yml
|
|
访问:http://localhost:3377/info
|
|
Group方案
通过Group实现环境区分,新建两个Group(在新建配置的时候指定Group即可)如下:
新建结果:
修改bootstrap.yml,增加一条group配置,可以配置为DEV_GROUP或者TEST_GROUP,如下:
|
|
application.yml修改成info环境
|
|
重启服务,访问:http://localhost:3377/info
|
|
改成:
|
|
访问:http://localhost:3377/info
|
|
NameSpace方案
新建dev和test两个Namespace
回到配置列表
bootstrap.yml增加namespace配置,属性值就是命名空间ID
|
|
访问:http://localhost:3377/info
|
|