默认以spring cloud项目来描述使用方式
使用的版本
- spring-boot:2.1.x
- spring-cloud:Greenwich.RELEASE
- spring-cloud-alibaba:2.1.x
- java:1.8+
Nacos服务端
服务端相当于euraka和spring-cloud-config的集合,Nacos的web页面,服务注册,和配置全部在服务端上
注册中心
注册中心和eureka差不多,只是Nacos提供了不同的页面,不过可以在服务详情里通过页面控制服务的上下线,这点还是比较方便,和配置中心一样,也可以通过Group+Namespace来管理服务,Nacos的服务的调用支持Feign和Dubbo
配置中心
Nacos支持spring、spring-boot、spring-cloud的配置管理。
Nacos的服务配置内容必须写在bootstrap.properties/yml中,Nacos默认会去读取以服务名称开头的配置,这里的配置的唯一id就是dataId,其组成如下:
在 Nacos Spring Cloud 中,
dataId
的完整格式如下:${prefix}-${spring.profiles.active}.${file-extension}
prefix
默认为spring.application.name
的值,也可以通过配置项spring.cloud.nacos.config.prefix
来配置。spring.profiles.active
即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当spring.profiles.active
为空时,对应的连接符-
也将不存在,dataId 的拼接格式变成${prefix}.${file-extension}
file-exetension
为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension
来配置。目前只支持properties
和yaml
类型。
除了服务名称开头的配置文件,Nacos还支持通过spring.cloud.nacos.config.shared-configs[n].data-id
和spring.cloud.nacos.config.extension-configs[n].data-id
的方式添加额外的配置,其加载的顺序如下
配置读取的顺序
Spring Cloud Alibaba Nacos Config 目前提供了三种配置能力从 Nacos 拉取相关的配置。
- A: 通过
spring.cloud.nacos.config.shared-configs[n].data-id
支持多个共享 Data Id 的配置- B: 通过
spring.cloud.nacos.config.extension-configs[n].data-id
的方式支持多个扩展 Data Id 的配置- C: 通过内部相关规则(应用名、应用名+ Profile )自动生成相关的 Data Id 配置
当三种方式共同使用时,他们的一个优先级关系是:A < B < C
可以参看:https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config
关于spring-boot的配置加载顺序可以参照Externalized Configuration,关于为什么写在bootstrap.properties/yml中可以参照application-context
配置管理
Nacos使用Group和Namespace来管理配置文件,每个配置文件都有一个Group和一个Namespace属性,包含关系是Group在Namespace下,而配置文件在Group下,可以使用这两个属性来区分不同的环境和场景
搭建Nacos项目
引入spring-cloud-alibaba版本依赖
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
版本依据spring-boot的版本而定,依赖版本可以查看发布版本,如下图
也可以参看这个https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
服务端使用
参看Nacos官方
目前项目是直接下载的Nacos稳定版本的压缩包
并使用(Linux)
sh bin/startup.sh -m standalone
单机启动,如果不加-m standalone
的话默认是集群模式
启动配置文件conf/application.properties
,可以在里面制定数据库,将配置文件存放到数据库中,使用数据库需要先初始化数据库,数据库脚本conf/nacos-mysql.sql
启动后访问http://ip:8848/nacos可以看到Nacos登录页面,默认登录账户名密码 nacos nacos
注册中心使用
引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
在bootstrap.yml或者bootstrap.properties中加入注册中心设置
# Nacos的地址
spring.cloud.nacos.discovery.server-addr=Nacos-server地址
# 命名空间,可不填,默认public
spring.cloud.nacos.discovery.namespace=NACOS命名空间
如果要使用Feign,和以前euraka的使用方法一致,Dubbo可以参看https://nacos.io/zh-cn/docs/use-nacos-with-dubbo.html
配置中心使用
引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
在bootstrap.yml或者bootstrap.properties中加入配置中心设置
spring.cloud.nacos.config.server-addr=Nacos-server地址
# 这个是必须要的
spring.application.name=example
如果不需要额外配置的话就使用这个就可以了
如果需要添加额外的配置,这里只列举一些项目中用的比较多的配置
# 文件后缀,这个配置只影响默认的配置(即服务名称+环境+文件后缀的形式)
spring.cloud.nacos.config.file-extension=properties
# 文件分组,这个配置只影响默认的配置(即服务名称+环境+文件后缀的形式)
spring.cloud.nacos.config.group=APPLICATION_GROUP
# 共享的配置(DEFAULT_GROUP)
spring.cloud.nacos.config.shared-configs=application.properties
# NACOS的命名空间
spring.cloud.nacos.config.namespace=NACOS的命名空间
# 额外配置
spring.cloud.nacos.config.extension-configs[0].data-id=xxxxx.properties
# 是否自动更新,默认是false,可以不写
spring.cloud.nacos.config.extension-configs[0].refresh=true
# 分组(默认是DEFAULT_GROUP,可以不写
spring.cloud.nacos.config.extension-configs[0].group=DEFAULT_GROUP
spring.cloud.nacos.config.extension-configs[1].data-id=xxx.properties
spring.cloud.nacos.config.extension-configs[1].refresh=true
动态刷新
在项目(Spring cloud项目)中使用@RefeshScope
注解就可以实现动态刷新
@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {
@Value("${useLocalCache:false}")
private boolean useLocalCache;
@RequestMapping("/get")
public boolean get() {
return useLocalCache;
}
}
这里在nacos上修改了useLocalCache为true之后,然后调用接口,可以看到接口返回的值为true
使用该注解可以引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-context</artifactId>
</dependency>
批量导入配置
Nacos支持批量导入配置,目前我所知有两种方式
- 直接将Nacos的数据库导出sql,然后再导入另外的数据库
- 在页面上使用导入配置功能
这里只介绍第二种方式,选择配置管理->配置列表,要导入的命名空间
选择上传文件,Nacos目前好像只支持zip压缩包
配置要放在一个文件夹中,文件夹的名称为导入后的Group名称,所以导入的结构
└─Group名称
└─xxx.properties
└─xxx.yml
弄好之后压缩为zip文件,然后导入即可
项目应用说明
目前在项目中使用Nacos作为配置中心和注册中心,本地只留了一个bootstrap.properties文件,其他配置全部使用nacos管理,使用Nacos的命令空间来管理不同环境的配置,如果目前项目使用check和pro来表示命名空间,使用group来区分公共文件和服务配置文件,如APPLICATION_GROUP和DEFAULT_GROUP,注册中心目前就是简单的注册功能,Nacos目前使用的是单机+mysql