一. 背景
在微服务架构中,每个服务都有自己的配置,配置数据库、redis的参数配置、服务器的地址等。通常情况下,在项目中配置了application-dev.yml、application-prod.yml、application-test.yml等多套环境配置,和应用打包在一起,启动服务时,选择不同的环境配置。如果需要修改配置信息,则需要重新进行打包,重启服务器。如是集群部署,还要考虑集群管理配置,代码安全、审核机制等因素,效率低。因此,动态配置就应运而生了。
二. 技术选型
微服务配置中心的技术选型一般有以下几个:Apollo、Disconf、Spring Cloud Config、Nacos等。
Apollo: 携程开源的配置管理中心,具备规范的流程治理、权限等特性。
Disconf:百度开源的配置管理中心,目前已经不维护了。
Spring Cloud Config:Spring Cloud 生态组件,结合git,可以和Spring Cloud体系无缝整合。
Nacos: 阿里开源的配置中心,也可以做DNS和RPC的服务发现。
由于Nacos比Apollo、Spring Cloud Config使用简单,而且还可以支持DNS和RPC的服务发现,博主选择了Nacos作为配置中心。
三. nacos配置中心的实现
本文的内容概要如下图1所示,将从四个方面带您了解nacos的使用。本文的demo代码已经上传github,小伙伴可以从自行下载。
图1 内容大纲
3.1 依赖库
由于需要把微服务注册到nacos并且读取配置中心配置,所以要依赖2个库。
<!--nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
<!--nacos-config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
3.2 项目配置
1)application开启:@EnableDiscoveryClient,把微服务注册到nacos。
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigApplication {
public static void main(String[] args) {
SpringApplication.run(NacosConfigApplication.class, args);
}
}
2)将application.properties改为bootstrap.yml,添加nacos注册、读取配置中心、服务地址、端口等配置信息。
server:
port: 8852
spring:
application:
name: consumer # 注册到nacos的名字
cloud:
nacos:
config: # nacos 配置中心
server-addr: localhost:8848
file-extension: yaml # 配置文件格式是yml
prefix: consumer # 配置文件前缀
group: DEFAULT_GROUP # group是默认的话,可以不写
# dataID不用配置:,只需要在nacos后台将dataId命名为:${prefix}-${spring.profiles.active}.${file-extension}
#;例如:consumer-dev.yaml
namespace: 8b575b9d-7d89-46df-b255-20f14b625a59 #自己创建的命名空间
discovery: # 注册到nacos
server-addr: localhost:8848
namespace: 8b575b9d-7d89-46df-b255-20f14b625a59
profiles:
active: dev #
3.3 nacos后台配置
本小节内容是本文的重点内容。
- 在nacos的图形化界面创建命名空间
上图中,8b575b9d-7d89-46df-b255-20f14b625a59对应bootstrap中的namespace,consumer-dev.yml 对应${prefix}-${spring.profiles.active}.${file-extension}拼接之后相等
-
现在可以把bootstrap中的配置移植到consumer-dev.yml中
同时本地bootstrap中只需连接到nacos的配置中心即可
spring: cloud: nacos: config: # nacos 配置中心 server-addr: localhost:8848 file-extension: yml # 配置文件格式是yml prefix: consumer # 配置文件前缀 group: DEFAULT_GROUP # group是默认的话,可以不写 # dataID不用配置:,只需要在nacos后台将dataId命名为: ${prefix}-${spring.profile.active}.${file-extension} #;例如:consumer-dev.yaml namespace: 8b575b9d-7d89-46df-b255-20f14b625a59 profiles: active: dev
-
开启自动刷新配置
@RefreshScope // 开启配置自动刷新
public class ConfigController {
}
目录