一、什么是nacos,为什么选择使用nacos

nacos是alibaba开源的一款具有分布式服务注册与发现、配置等功能的组件,熟悉分布式spring cloud的小伙伴一定对eureka、config不陌生。在没有nacos的时候,我们可能选择的组件eureka作为服务注册中心,总体使用感觉一般般。其次就是如果要对服务进行配置的话,还得引入config,这只是对单机下服务进行配置与刷新,如果要对集群服务进行配置刷新的话,还得额外引入bus、mq等相关组件,整体变得更加复杂。而在这里我们只是用nacos,就能实现服务注册、配置等功能,使用上更精近一步,架构更加清晰。

二、Nacos作为配置中心使用

关于nacos的启动,这里就不作描述了,想要了解的可以前往以下文章:

Nacos注册中心简单使用(含nacos搭建集群流程)

1、 依赖导入,需要先将服务注册进nacos,再通过nacos进行配置管理

<!--将服务注册进nacos-->
<dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
     <version>2.2.0.RELEASE</version>
</dependency>
<!--使用nacos作为配置中心-->
<dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
     <version>2.2.0.RELEASE</version>
</dependency>

2、配置文件如下(需要使用bootstrap.yml或bootstrap.properties):

server:
  port: 8888

spring:
  application:
    name: learn-01
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #服务注册地址
      config:
        server-addr: localhost:8848 #配置中心地址
        file-extension: yml #m默认读取的是配置中心文件类型为properties的文件,如果像读取其他格式需要在此处指定

3、在nacos上创建配置文件(learn-01.yml(服务名)或其他格式,如果非properties,则需要在spring.cloud.nacos.config.file-extension上指定文件格式),步骤如下:

 Data ID:你的服务名+文件类型(nacos默认读取的形势,如果不想要这种的,可以在配置文件上进行指定,通过spring.cloud.nacos.config.name去指定)。

Group:nacos默认读取的是DEFAULT_GROUP,如果指其他,需要配置spring.cloud.nacos.config.group去指定让nacos读取。

4、远程配置文件读取

 1)编写一个controller,读取远程key属性

@RefreshScope的作用:如果远程配置文件内容进行了更新,加上该注解可以获取到修改之后的内容值。

@RestController
@RefreshScope
public class TestController {

    @Value("${key}")
    private String key;

    @GetMapping("/get-key")
    public String getKey(){
        return key;
    }

}

2)访问接口,获取值

5、总结,这就是nacos配置中心的初步用法,可以将本地配置文件的内容通过上述的方式存放在远程的nacos上进行管理。

三、进阶用法之命名空间

用法一:可以将命名空间理解为环境profile,如我们开发之中的dev、test、prod等环境。可以在此处新建对应环境的命名空间,在每个空间下存放不同服务的配置文件,最终再通过本地bootstrap文件中使用spring.cloud.nacos.config.accesskey去指定命名空间下的配置文件。

用法二:可以将命名空间以另外一种形式去理解,可以将命名空间理解为服务,一个服务对应一个命名空间,在该命名空间下存放的是该服务的多个配置文件(配置文件可以是一个环境下有多个不同配置文件组成,也可以是多个环境的配置文件)。说人话就是,该命名空间只存放该服务所有环境下的配置文件。

accesskey获取方式:

1)新建一个命名空间

2) 命名空间id就是accesskey

四、进阶用法之Group

 Group是在创建配置文件时就可以指定的

Group可以理解为在public命名空间下不同环境的配置文件,如可以在public命名空间下创建多个同名,不同Group的配置文件,最后在本地文件中通过 spring.cloud.nacos.config.group去指定读取哪一个配置文件。

五、进阶用法之读取多个配置文件

场景:

1、服务中配置的内容多了,将一个配置文件拆分成多个:数据源配置文件、mybatis配置文件、rabbitmq配置文件等等,服务在启动时服务将这些文件读取进来。

2、不同服务之间存在着相同的配置文件,可以将相同的内容进行拆分,每个服务再去将拆分之后的配置文件读取,这样就可以在一个文件上对共同的配置进行编辑,而不用每一个文件都去做修改。

通过以下的方式进行多配置读取:

spring:
  application:
    name: learn-01
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #服务注册地址
      config:
        server-addr: localhost:8848 #配置中心地址
        file-extension: yml #m默认读取的是配置中心文件类型为properties的文件,如果像读取其他格式需要在此处指定
        extension-configs[0]:     #配置文件1
          data-id: file01.yml     #文件名
          group: DEFAULT_GROUP    #group
          refresh: true           #文件内容修改是否更新到本地
        extension-configs[1]:
          data-id: file02.yml
          group: DEFAULT_GROUP
          refresh: true

可以无需在列表中指定配置中心的learn-01.yml,会自动将其读取进来,而且该文件会将远程中其他文件的相同属性进行覆盖,也就是配置中心的learn-01.yml的优先级比其他文件高。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐