一、配置中心存的意义
1、微服务中配置文件的问题
配置文件的问题:
-
配置文件的数量会随着服务的增加持续递增
-
单个配置文件无法区分多个运行环境
-
配置文件内容无法动态更新,需要重启服务
引入配置文件:刚才架构就会成为这样。是由配置中心统一管理
-
统一配置文件管理
-
提供统一标准接口,服务根据标准接口自行拉取配置
-
支持动态更新的到所有服务
2、业界常用的配置中心
-
Appllo
-
统一管理不同环境、不同集群的配置
-
配置修改实时生效(热发布)
-
版本发布管理
-
灰度发布
-
权限管理、发布审核、操作审计
-
提供开放平台 API
-
-
Disconf
是百度开源的框架,他是基于zk来实现配置变更后来实时通知和生效的。
-
SpringCloud Config
他是springcloud自带的配置组件,他可以和spring进行无缝集成,spring自家研发的,使用起来很方便,配置存储是支持git ,不过他缺少可视化界面,并且配置的生效也不是实时的。需要重启,或者手动刷新的功能。
-
Nacos
-
二、Nacos安装以及编译
1、下载源码
解压进入目录中进行maven编译
mvn clean install -DskipTests -Drat.skip=true -f pom.xml
注意:编译的时候可能需要你自己指定jdk版本,可以修改maven配置文件conf/settings.xml
<profile> <id>jdk-1.8</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> </properties> </profile>
2、源码单机启动
-
将jdk版本都设置为jdk8
-
设置参数
-Dnacos.standalone=true
3、单机启动服务
-
下载nacos服务
Releases · alibaba/nacos · GitHub
-
解压进入bin目录
-
执行命令
startup.cmd -m standalone
5、修改startup.cmd
将MODE模式改为standalone,这样下次直接双击startup.cmd就可以了
三、Nacos Config数据模型
Nacos Config数据模型
数据模型最佳实践
Namespace | 代表不同的运行环境:Dev/Test/Prod |
Group | 代表某一类配置,比如中间件配置、数据库配置 |
Datald | 某个项目中具体的配置文 |
四、Nacos集成springboot实现统一配置管理
1、集成过程
-
增加依赖
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
-
开启注解
没有注解
-
增加配置
这里的配置是bootstrap.yaml(bootstrap.properties)
bootstrap.yml(bootstrap.properties)用来程序引导时执行,应用于更加早期配置信息读取,如可以使用来配置application.yml中使用到参数等
application.yml(application.properties) 应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数等。
加载顺序bootstrap.yml > application.yml > application-dev(prod).yml
spring.application.name=nacos-config #nacos地址 spring.cloud.nacos.config.server-addr=localhost:8848
4、获取对应的属性
@RestController public class NacosConfigController { @Value("${name}") private String name; @RequestMapping("/getName") public String getName(){ return name; } }
此时是可以获取到数据配置中心的数据的,但是他不能动态更新,为此我们可以加注解@RefreshScope
2、各种配置加载顺序
spring.application.name=nacos-config server.port=8081 #nacos地址 spring.cloud.nacos.config.server-addr=localhost:8848 #1、只有上面的配置的时候他默认加载文件为:${application.name} #2、指定文件后缀名称 #加载文件为:${application.name}.${file-extension} #nacos-config.yaml spring.cloud.nacos.config.file-extension=yaml ##3、profile: 指定环境 文件名:${application.name}-${profile}.${file-extension} ##nacos-config-prod.yaml spring.profiles.active=prod #4、nacos自己提供的环境隔离 ,这里是开发环境下的 spring.cloud.nacos.config.namespace=ff02931a-6fdb-4681-ac37-2f6d9a0596f8 #5、 自定义 group 配置,这里也可以设置为数据库配置组,中间件配置组,但是一般不用, # 配置中心淡化了组的概念,使用默认值DEFAULT_GROUP spring.cloud.nacos.config.group=DEFAULT_GROUP # #6、自定义Data Id的配置 共享配置(sharedConfigs)0 spring.cloud.nacos.config.shared-configs[0].data-id= common.yaml #可以不配置,使用默认 spring.cloud.nacos.config.shared-configs[0].group=DEFAULT_GROUP # 这里需要设置为true,动态可以刷新,默认为false spring.cloud.nacos.config.shared-configs[0].refresh=true # 7、扩展配置(extensionConfigs) # 支持一个应用有多个DataId配置,mybatis.yaml datasource.yaml spring.cloud.nacos.config.extension-configs[0].data-id=datasource.yaml spring.cloud.nacos.config.extension-configs[0].group=DEFAULT_GROUP spring.cloud.nacos.config.extension-configs[0].refresh=true #作用:顺序 #${application.name}-${profile}.${file- extension} msb-edu-prod.yaml #${application.name}.${file-extension} nacos-config.yaml #${application.name} nacos-config #extensionConfigs 扩展配置文件 #sharedConfigs 多个微服务公共配置 redis