配置中心—高并发场景微服务实战(十)
Hello,牛油们好,我是程序员Alan, 很高兴遇见你。
在《白话服务治理—高并发场景微服务实战(九)》中,我们通过引入Nacos实现了服务的注册与发现。今天我们继续使用Nacos实现微服务的另一项重要特性—分布式配置中心。
参数配置的演变
早期软件开发时,很多小伙伴都是使用的硬编码,将一些可变参数写死在代码中。这样操作弊端很明显:
- 当参数变更时,必须重新构建编译代码,维护成本很高。
后来,业界形成规则,将一些可变参数抽取出来形成多种格式的配置文件,例如我们经常使用的application.yml等等。通过将这些参数集中管理,发生变更时只需要更新配置文件重启服务即可,不需要重新编译代码。这样做也有很多弊端:
- 关键信息暴露在配置文件中,安全性低。
- 配置文件变更后,需要重启服务。
再接着出现了分布式配置,将配置参数从项目中解耦出来,服务可以随时从配置中心获取最新配置或配置中心变更时向项目中推送,这样做优势很明显:
- 避免了关键信息暴露的问题
- 配置可以做到实时生效,对一些规则复杂的代码场景很有帮助
- 配置集中管理在面对多环境部署时,能够轻松应对。
开源组件介绍
业内有很多开源的分布式配置组件,比如携程的 Apollo(阿波罗),淘宝的 Diamond,百度的 Disconf,360 的 QConf ,阿里的 Nacos 等等。
本案例中采用 Nacos 作为选型,为什么选 Nacos ?主要是因为已经在项目中使用了 Nacos 作为服务注册中心,它兼有配置中心的功能,所以无须额外引入第三方组件,增加系统复杂度。
Nacos配置管理应用
安装Nacos
在《注册中心—高并发场景微服务实战(九)》中已经详细介绍了Nacos的安装,本文就不再复述了,有不明白的小伙伴可以返回去再看一遍。
服务中应用Nacos配置管理
本文演示如何在Sping Boot项目中启动Nacos的服务发现功能。
1.添加依赖
<dependency> <groupId>com.alibaba.boot</groupId> <artifactId>nacos-config-spring-boot-starter</artifactId> <version>0.2.1</version> </dependency>
2.在 application.yml 中配置 Nacos server 的地址
nacos: config: server-addr: 127.0.0.1:8848
3.使用 @NacosPropertySource 加载 dataId 为 example 的配置源,并开启自动更新:
@SpringBootApplication @NacosPropertySource(dataId = "example", autoRefreshed = true) public class NacosConfigApplication { public static void main(String[] args) { SpringApplication.run(NacosConfigApplication.class, args); } }
4.通过 Nacos 的 @NacosValue 注解设置属性值。
@Controller @RequestMapping("config") public class ConfigController { @NacosValue(value = "${useLocalCache:false}", autoRefreshed = true) private boolean useLocalCache; @RequestMapping(value = "/get", method = GET) @ResponseBody public boolean get() { return useLocalCache; } }
5.启动 NacosConfigApplication,调用 http://localhost:8080/config/get,返回内容是 false。
6.Nacos server发布配置
配置项的 value 类型需要与代码中约定的一致,否则解析时会出错。
方法一:
通过调用 Nacos Open API 向 Nacos server 发布配置:dataId 为example,内容为useLocalCache=true
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=example&group=DEFAULT_GROUP&content=useLocalCache=true"
方法二:
通过Nacos 控制台新建配置

通过上述例子我们可以看到,配置中心修改配置项的值后,服务是立即可以感知到的。
我们可以将相应的数据库连接、第三方应用接入的密钥、经常发生变更的参数项都填充到配置中心,借助配置中心自身的权限控制,可以确保敏感项不泄露,同时针对不同的部署环境也可以很好的做好配置隔离。
站在巨人的肩膀上
- Nacos文档
- SpringCloud微服务实战—码闻强
说到高并发和微服务,你是不是和我一样有很多的困惑? -知道高并发系统开发知识,是获取大厂Offer的利器,可是工作中遇不到高并发的需求场景。 -了解过微服务开发、高并发系统开发理论,苦于没实战经验。 为了帮助其他有这些困惑的朋友,我决定以一个虚拟的高并发场景的微服务系统为主线,一步步将技术点串联起来,系统性从 0 到 1 的创造一个高并发场景的微服务系统。