手把手教你使用Nacos配置中心

简介: 手把手教你使用Nacos配置中心

Nacos整合了注册中心和配置中心,使用起来非常方便,这篇文章主要介绍Nacos配置中心的使用。

新建配置

启动Nacos服务后,进入注册中心配置页面,如下图:

微信图片_20221212205206.png

点击上图中红框里面的加号,进入新建配置页面,如下图:

微信图片_20221212205232.png

上图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,内容如下图:

微信图片_20221212205259.png

这里使用的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 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

可以通过下图进入命名空间页面:

微信图片_20221212205326.png

添加一个命名空间,如下图,命名空间ID可以不填,系统会自动生成:

微信图片_20221212205346.png

按照上图我创建了三个namespace。这样在【配置管理】-【配置列表】中添加配置时,就会出现刚刚配置的namespace,如下图:

微信图片_20221212205407.png

这里我选择 dev 进行添加配置。如下图,配置一个testnamespace=dev 的配置:

微信图片_20221212205433.png

因为使用了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的配置:

微信图片_20221212205459.png配置之后serviceA和serviceB配置列表如下图:

微信图片_20221212205523.png

这时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,如下图:

微信图片_20221212205550.png

其中,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的配置中心功能还是比较完备的,可以很好地满足业务系统使用。


相关文章
|
16天前
|
JSON Java Nacos
SpringCloud 应用 Nacos 配置中心注解
在 Spring Cloud 应用中可以非常低成本地集成 Nacos 实现配置动态刷新,在应用程序代码中通过 Spring 官方的注解 @Value 和 @ConfigurationProperties,引用 Spring enviroment 上下文中的属性值,这种用法的最大优点是无代码层面侵入性,但也存在诸多限制,为了解决问题,提升应用接入 Nacos 配置中心的易用性,Spring Cloud Alibaba 发布一套全新的 Nacos 配置中心的注解。
|
5月前
|
Java Nacos 数据库
使用 nacos 搭建注册中心及配置中心
使用 nacos 搭建注册中心及配置中心
109 5
|
5月前
|
NoSQL Java Nacos
SpringCloud集成Seata并使用Nacos做注册中心与配置中心
SpringCloud集成Seata并使用Nacos做注册中心与配置中心
183 3
|
1月前
|
负载均衡 应用服务中间件 Nacos
Nacos配置中心
Nacos配置中心
91 1
Nacos配置中心
|
1月前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评。然而,“客户端不发送心跳检测”是使用中常见的问题之一。本文详细探讨了该问题的原因及解决方法,包括检查客户端配置、网络连接、日志、版本兼容性、心跳检测策略、服务实例注册状态、重启应用及环境变量等步骤,旨在帮助开发者快速定位并解决问题,确保服务正常运行。
48 5
|
1月前
|
监控 Java 测试技术
Nacos 配置中心变更利器:自定义标签灰度
本文是对 MSE Nacos 应用自定义标签灰度的功能介绍,欢迎大家升级版本进行试用。
151 11
|
1月前
|
网络安全 Nacos 开发者
Nacos作为流行的微服务注册与配置中心,“节点提示暂时不可用”是常见的问题之一
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,“节点提示暂时不可用”是常见的问题之一。本文将探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务的正常运行。通过检查服务实例状态、网络连接、Nacos配置、调整健康检查策略等步骤,可以有效解决这一问题。
37 4
|
1月前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,实际使用中常遇到“客户端不发送心跳检测”的问题。本文深入探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务正常运行。通过检查客户端配置、网络连接、日志、版本兼容性、心跳策略、注册状态、重启应用和环境变量等步骤,系统地排查和解决这一问题。
53 3
|
1月前
|
安全 Nacos 数据库
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改。本文详细探讨了这一问题的原因及解决方案,包括限制公网访问、使用HTTPS、强化数据库安全、启用访问控制、监控和审计等步骤,帮助开发者确保服务的安全运行。
54 3
|
1月前
|
SQL 关系型数据库 数据库连接
"Nacos 2.1.0版本数据库配置写入难题破解攻略:一步步教你排查连接、权限和配置问题,重启服务轻松解决!"
【10月更文挑战第23天】在使用Nacos 2.1.0版本时,可能会遇到无法将配置信息写入数据库的问题。本文将引导你逐步解决这一问题,包括检查数据库连接、用户权限、Nacos配置文件,并提供示例代码和详细步骤。通过这些方法,你可以有效解决配置写入失败的问题。
87 0