当前位置: 首页 > 科技观察

教你如何使用Nacos配置中心

时间:2023-03-19 19:17:34 科技观察

Nacos将注册中心和配置中心集成在一起,使用起来非常方便。本文主要介绍Nacos配置中心的使用。新建配置启动Nacos服务后,进入注册中心配置页面,如下图:点击上图红框中的加号,进入新建配置页面,如下图:上图中DataID的完整格式如下:${prefix}-${spring.profiles.active}.${file-extension}说明如下:prefix:默认为spring的值。application.name,可以通过配置项spring.cloud.nacos.config.prefix在配置文件中配置。spring.profiles.active是当前环境对应的profile。当spring.profiles.active为空时,对应的connector-也将不存在,dataId的拼接格式变为{file-extension}file-exetension为配置内容的文件格式。目前,仅支持属性和yaml类型。你可以在配置文件中通过配置项spring.cloud.nacos.config.file-extension进行配置。这里我创建了一个DataID,内容如下:这里使用的spring.profiles.active是dev,bootstrap.properties的配置如下:spring.application.name=nacos-producerspring.cloud.nacos.config.file-extension=properties添加如下Controller类进行测试:@Controller@RequestMapping("config")@RefreshScopepublicclassConfigController{@Value("${useLocalCache}")privatebooleanuseLocalCache;@RequestMapping(value="/get",method=GET)@ResponseBodypublicbooleanget(){returnuseLocalCache;}}浏览器输入以下URL后输出true,更改后输出会发生变化:http://localhost:8083/config/get@RefreshScope这个注解允许应用程序动态地实际开发中刷新配置多环境,我们会有多环境。比如我本地有dev、test、prod三个环境。Nacos使用命名空间来隔离多个环境和多个租户。Nacos默认的命名空间是public。以下是命名空间的官方描述:用于租户粒度配置隔离。同一个Group或DataID的配置可以存在于不同的命名空间下。Namespace常见的场景之一是不同环境下配置的分离和隔离,比如开发测试环境和生产环境的资源(如配置和服务)的隔离。可以通过下图进入命名空间页面:添加命名空间,如下图,命名空间ID可以不填,系统会自动生成:我按照上图创建了三个命名空间。这样,在【配置管理】-【配置列表】中添加配置时,会出现刚才配置的命名空间,如下图:这里我选择dev来添加配置。如下图,配置一个testnamespace=dev的配置:因为使用了命名空间,所以我们必须在配置文件bootstrap.properties中指定我们使用的是哪个命名空间,例如在开发环境:spring.cloud。nacos.config.namespace=ad0738cd-b595-4885-a4e5-03f547d11fa0现在更改测试Controller,添加如下配置:@Controller@RequestMapping("config")@RefreshScopepublicclassConfigController{@Value("${testnamespace}")privateStringtestnamespace;@RequestMapping(value="/getEnv",method=GET)@ResponseBodypublicStringgetEnv(){returntestnamespace;}}浏览器进入如下配置,输出dev,说明命名空间配置生效。http://localhost:8083/config/getEnv业务隔离如果不同的业务系统需要配置隔离,比如服务A和服务B有database、redis、mq等相关配置,且配置名称相同,如何隔离他们??Nacos提供分组隔离。我们来看看官方的描述:Nacos中的一组配置集,是组织配置的维度之一。通过有意义的字符串(例如Buy或Trade)对配置集进行分组,从而区分具有相同数据ID的配置集。在Nacos上创建配置时,如果不填写配置组名称,则配置组名称默认为DEFAULT_GROUP。配置分组的常见场景:不同的应用或组件使用相同的配置类型,例如database_url配置和MQ_topic配置。在这里,我已经为serviceA和serviceB配置了数据库。下图是serviceB的配置:配置完成后,serviceA和serviceB的配置列表如下图所示:此时serviceA和serviceB需要在bootstrap.properties中指定一个group。下面是serviceA的配置:spring.cloud.nacos.config.group=serviceA此时在测试Controller中添加如下代码:@Controller@RequestMapping("config")@RefreshScopepublicclassConfigController{@Value("${spring.datasource.max-idle}")privateStringmaxIdle;@RequestMapping(value="/getMaxIdle",method=GET)@ResponseBodypublicStringgetMaxIdle(){returnmaxIdle;}}测试后输入10,url如下:http://localhost:8083/config/getMaxIdle共享配置如果是新应用,我想分享其他应用程序的配置。比如上面的serviceA可以共享serviceB的配置。是否可以?Nacos支持配置共享。我们创建两个共享配置serviceA.properties和serviceB.properties,如下图所示:其中serviceA.properties的配置内容如下:spring.datasource.max-idle=10serviceB.properties的配置内容为如下:spring.datasource.min-idle=5如果我在当前应用中共享这两个配置,需要在bootstrap.properties中添加如下配置:spring.cloud.nacos.config.shared-configs[0]。dataId=serviceA.propertiesspring.cloud.nacos.config.shared-configs[0].group=DEFAULT_GROUPspring.cloud.nacos.config.shared-configs[0].refresh=truespring.cloud.nacos.config.shared-configs[1].dataId=serviceB.propertiesspring.cloud.nacos.config.shared-configs[1].group=DEFAULT_GROUPspring.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的配置中心功能比较完善,可以很好的满足业务系统的需求。