一、什么是nacos,为什么选择使用nacos
nacos是alibaba开源的一款具有分布式服务注册与发现、配置等功能的组件,熟悉分布式spring cloud的小伙伴一定对eureka、config不陌生。在没有nacos的时候,我们可能选择的组件eureka作为服务注册中心,总体使用感觉一般般。其次就是如果要对服务进行配置的话,还得引入config,这只是对单机下服务进行配置与刷新,如果要对集群服务进行配置刷新的话,还得额外引入bus、mq等相关组件,整体变得更加复杂。而在这里我们只是用nacos,就能实现服务注册、配置等功能,使用上更精近一步,架构更加清晰。
二、Nacos作为配置中心使用
关于nacos的启动,这里就不作描述了,想要了解的可以前往以下文章:
Nacos注册中心简单使用(含nacos搭建集群流程)
1、 依赖导入,需要先将服务注册进nacos,再通过nacos进行配置管理
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
2.2.0.RELEASE
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
2.2.0.RELEASE
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的优先级比其他文件高。