当前栏目
手把手教你使用Nacos配置中心
Nacos整合了注册中心和配置中心,使用起来非常方便,这篇文章主要介绍Nacos配置中心的使用。
新建配置
启动Nacos服务后,进入注册中心配置页面,如下图:
![图片](https://s5.51cto.com/oss/202108/02/60e137af7ad303e17531701c06df15cb.jpg)
点击上图中红框里面的加号,进入新建配置页面,如下图:
![图片](https://s5.51cto.com/oss/202108/02/b9ea339e9ca8b91d1215d8a97ffd7072.jpg)
上图Data ID的完整格式如下:
- ${prefix}-${spring.profiles.active}.${file-extension}
说明如下:
- prefix:默认是spring.application.name的值,可以通过配置项 spring.cloud.nacos.config.prefix在配置文件中配置。
- spring.profiles.active即为当前环境对应的profile。
当 spring.profiles.active 为空时,对应的连接符-也将不存在,dataId的拼接格式变成 {file-extension}
file-exetension 为配置内容的文件格式,目前只支持properties和yaml类型,可以通过配置项 spring.cloud.nacos.config.file-extension在配置文件中配置。
这里我创建一个Data ID,内容如下图:
![图片](https://s5.51cto.com/oss/202108/02/7930d7893fad89c75d1428d70f28d47d.jpg)
这里使用的spring.profiles.active是dev,bootstrap.properties的配置如下:
- spring.application.name=nacos-producer
- spring.cloud.nacos.config.file-extension=properties
增加下面这个Controller类进行测试:
- @Controller
- @RequestMapping("config")
- @RefreshScope
- public class ConfigController {
- @Value("${useLocalCache}")
- private boolean useLocalCache;
- @RequestMapping(value = "/get", method = GET)
- @ResponseBody
- public boolean get() {
- return useLocalCache;
- }
- }
在浏览器输入下面的URL后输出 true,更改之后输出也会跟着变化:
- http://localhost:8083/config/get
@RefreshScope这个注解可以让应用动态刷新配置
多环境
实际开发中,我们会有多套环境,比如在我本地有dev、test、prod三套环境,Nacos使用namespace来进行多环境和多租户的隔离。Nacos默认的namespace是public。
下面是官方对namespace的描述:
用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
可以通过下图进入命名空间页面:
![图片](https://s3.51cto.com/oss/202108/02/78417a04c91c119f600b562da173398d.jpg)
添加一个命名空间,如下图,命名空间ID可以不填,系统会自动生成:
![图片](https://s6.51cto.com/oss/202108/02/fbb2818c01153c17d09b50045bbcfcf6.jpg)
按照上图我创建了三个namespace。这样在【配置管理】-【配置列表】中添加配置时,就会出现刚刚配置的namespace,如下图:
![图片](https://s3.51cto.com/oss/202108/02/b4e7fc6b4693d116bac6414733a2471a.jpg)
这里我选择 dev 进行添加配置。如下图,配置一个testnamespace=dev 的配置:
![图片](https://s2.51cto.com/oss/202108/02/a656baaa4c69443275ecb27b07fd87f8.jpg)
因为使用了namespace,就必须在配置文件bootstrap.properties中指定我们使用了哪个namespace,比如在dev环境的bootstrap.properties文件中增加如下配置:
- spring.cloud.nacos.config.namespace=ad0738cd-b595-4885-a4e5-03f547d11fa0
这时改一下测试Controller增加下面配置:
- @Controller
- @RequestMapping("config")
- @RefreshScope
- public class ConfigController {
- @Value("${testnamespace}")
- private String testnamespace;
- @RequestMapping(value = "/getEnv", method = GET)
- @ResponseBody
- public String getEnv() {
- return testnamespace;
- }
- }
浏览器输入下面配置,输出 dev,可见 namespace 配置生效了。
- http://localhost:8083/config/getEnv
业务隔离
如果不同的业务系统需要进行配置隔离,比如服务A、服务B都有数据库、redis、mq等相关配置,配置名称是一样的,怎么进行隔离呢?
Nacos提供了group进行隔离,我们看一下官方描述:
Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。
这里,我对serviceA和serviceB做了数据库配置,如下图是serviceB的配置:
![图片](https://s3.51cto.com/oss/202108/02/4cd1c2e047d868bdd1392db3b8d64891.jpg)
配置之后serviceA和serviceB配置列表如下图:
![图片](https://s6.51cto.com/oss/202108/02/48d47804b555636598da3c036e500069.jpg)
这时serviceA和serviceB需要在bootstrap.properties中指定group,如下是serviceA的配置:
- spring.cloud.nacos.config.group=serviceA
这时在测试Controller中增加下面代码:
- @Controller
- @RequestMapping("config")
- @RefreshScope
- public class ConfigController {
- @Value("${spring.datasource.max-idle}")
- private String maxIdle;
- @RequestMapping(value = "/getMaxIdle", method = GET)
- @ResponseBody
- public String getMaxIdle() {
- return maxIdle;
- }
- }
使用下面url测试后输入 10:
- http://localhost:8083/config/getMaxIdle
共享配置如果一个新的应用,想要共享其他应用的配置,比如上面serviceA可以共享serviceB的配置,是否可以呢?Nacos是支持配置共享的。
我们创建两个共享配置 serviceA.properties 和 serviceB.properties,如下图:
![图片](https://s4.51cto.com/oss/202108/02/10719c8184218f996fa7209fc181f9ae.jpg)
其中,serviceA.properties的配置内容如下:
- spring.datasource.max-idle=10
serviceB.properties的配置内容如下:
- spring.datasource.min-idle=5
我在当前的应用中共享这两个配置,就需要在bootstrap.properties中增加下面的配置:
- spring.cloud.nacos.config.shared-configs[0].dataId=serviceA.properties
- spring.cloud.nacos.config.shared-configs[0].group=DEFAULT_GROUP
- spring.cloud.nacos.config.shared-configs[0].refresh=true
- spring.cloud.nacos.config.shared-configs[1].dataId=serviceB.properties
- spring.cloud.nacos.config.shared-configs[1].group=DEFAULT_GROUP
- spring.cloud.nacos.config.shared-configs[1].refresh=true
启动应用后,在浏览器输入下面url,页面响应 10:
- http://localhost:8083/config/getMaxIdle
在浏览器输入下面url,页面响应 5:
- http://localhost:8083/config/getMinIdle
注意:共享配置要加.properties或者.yaml的后缀,否则访问不到。
总结
今天主要介绍了Nacos中配置中心的使用,包括基于namespace实现的多环境和多租户的配置,基于group实现的业务隔离,以及共享配置。可以看到Nacos的配置中心功能还是比较完备的,可以很好地满足业务系统使用。
相关文章
- 鲜为人知但很有用的 HTML 属性
- 翻转再翻转!有意思的水平横向溢出滚动
- 自定义计数器小技巧!CSS 实现长按点赞累加动画
- 过五关!React高频面试题指南
- 软件开发中的十个认知偏差
- 不需要 JS!仅用 CSS 也能达到监听页面滚动的效果!
- 一文读懂TypeScript类型兼容性
- Vue 的响应式原则与双向数据绑定
- 快速掌握 TypeScript 新语法:Infer Extends
- JWT教你如何证明你是我的人!
- 一篇带给你 V8 GC 的实现
- 面试官:请使用JS完成一个LRU缓存?
- 通过可视化来学习JavaScript事件循环
- 新的跨域策略:使用 COOP、COEP 为浏览器创建更安全的环境
- 为什么有人说 vite 快,有人却说 vite 慢?
- 种草 Vue3 中几个好玩的插件和配置
- 超全面的前端工程化配置指南
- Vue 状态管理未来样子
- Volatile关键字能保证原子性么?
- 面试突击:SpringBoot 有几种读取配置文件的方法?