一. 背景
在微服务架构中,每个服务都有自己的配置,配置数据库、redis的参数配置、服务器的地址等。通常情况下,在项目中配置了application-dev.yml、application-prod.yml、application-test.yml等多套环境配置,和应用打包在一起,启动服务时,选择不同的环境配置。如果需要修改配置信息,则需要重新进行打包,重启服务器。如是集群部署,还要考虑集群管理配置,代码安全、审核机制等因素,效率低。因此,动态配置就应运而生了。
二. 技术选型
微服务配置中心的技术选型一般有以下几个:Apollo、Disconf、Spring Cloud Config、Nacos等[1]。
Apollo: 携程开源的配置管理中心,具备规范的流程治理、权限等特性。
Disconf:百度开源的配置管理中心,目前已经不维护了。
Spring Cloud Config:Spring Cloud 生态组件,结合git,可以和Spring Cloud体系无缝整合。
Nacos: 阿里开源的配置中心,也可以做DNS和RPC的服务发现。
至于它们之间的区别,请参考博客[1]。
由于Nacos比Apollo、Spring Cloud Config使用简单,而且还可以支持DNS和RPC的服务发现,博主选择了Nacos作为配置中心。
三. nacos配置中心的实现
本文的内容概要如下图1所示,将从四个方面带您了解nacos的使用。本文的demo代码已经上传github,小伙伴可以从自行下载。
图1 内容大纲
3.1 依赖库
由于需要把微服务注册到nacos并且读取配置中心配置,所以要依赖2个库。
def alibabaCloudVersion = '2.2.3.RELEASE' // nacos 注册 implementation "com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:${alibabaCloudVersion}" // nacos 配置 implementation "com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config:${alibabaCloudVersion}"
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: redis cloud: nacos: config: # nacos 配置中心 server-addr: localhost:8848 file-extension: yaml # 配置文件格式是yml prefix: redis # 配置文件前缀 group: DEFAULT_GROUP # group是默认的话,可以不写 # dataID不用配置:,只需要在nacos后台将dataId命名为: ${prefix}-${spring.profile.active}.${file-extension} #;例如:redis-dev.yaml discovery: # 注册到nacos server-addr: localhost:8848 profiles: active: dev redis: # 下发redis的配置信息 host: http://localhost port: 3379 database: 0
3)添加测试controller(只是为了示范redis的配置信息的读取)
@RestController public class ConfigController { @Value("${spring.redis.host}") private String reidsHost; @Value("${spring.redis.port}") private String reidsPort; @Value("${spring.redis.database}") private String reidsDatabase; @GetMapping(path = "nacos/config/getRedisConfig") public String getRedisConfig() { return "reids cofig: [ host: " + reidsHost + ", port: " + reidsPort + ", database: " + reidsDatabase + " ]"; } }
运行代码,在浏览器输入:http://localhost:8852/nacos/config/getRedisConfig,服务器读取了本地bootstrap.yml的配置信息。
3.3 nacos后台配置
本小节内容是本文的重点内容。
1)启动 nacos
终端输入: sh startup.sh -m standalone,在浏览器输入:http://localhost:8848/nacos/#/login, 输入账号、密码:nacos、nacos。
2)创建配置文件
我们来看一下bootstrap.yml中已经配置了命名为:redis-dev.yml的配置文件,规则如下图所示: ${prefix}-${spring.profile.active}.${file-extension}。
接着,我们在nacos后台创建redis-dev.yml的配置文件。
A.点击新增按钮
B.编辑内容并发布
3)开启自动刷新配置
@RefreshScope // 开启配置自动刷新 public class ConfigController {
}
4) 重新启动服务
重启服务之后,我们从nacos后台修改配置中心的内容:redis 的port和database,并点击发布:
port: 3379 改为: 3381 database: 0 改为: 100
控制台输出了以下信息,我们看到微服务已经自动拉到了最新的配置信息。
在浏览器输入:http://localhost:8852/nacos/config/getRedisConfig,看到成功显示了最新的配置信息:
3.4 配置回滚
有时候要回滚线上配置信息,nacos后台提供了配置回滚功能。操作步骤如下:
在弹出的历史版本中选择任意一个版本回滚。
例如在这里,博主选择了第一个历史版本回滚。我们在浏览器输入:http://localhost:8852/nacos/config/getRedisConfig,看到回滚信息已生效。
以上就是本篇博客的全部内容,感谢阅读。本文的demo代码已经上传github,小伙伴可以从自行下载。
参考链接:https://baijiahao.baidu.com/s?id=1662923343412122321&wfr=spider&for=pc