- 一、SpringCloud Nacos 概述
- 二、SpringCloud Nacos 下载安装启动
- 三、SpringCloud Nacos 作为服务注册发现中心
- 四、SpringCloud Nacos 作为Config配置中心
- 五、SpringCloud Nacos Config配置中心动态更新
- 六、项目实现配置文件动态刷新,bootstrap.properties增加配置
- 七、SpringCloud Nacos Config配置DataId配置规则
- 八、完全关闭 Nacos Config 的自动化配置
- 九、Nacos Config Starter 更多的配置项信息
- 十、Nacos服务端开启鉴权
- 十一、Nacos Config 对外暴露的 Endpoint
一、SpringCloud Nacos 概述
Nacos 是一个 Alibaba 开源的、易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
使用 Spring Cloud Alibaba Nacos Config,可基于 Spring Cloud 的编程模型快速接入 Nacos 配置管理功能。
官方地址:
https://nacos.io/zh-cn/index.html
官方文档:
https://nacos.io/zh-cn/docs/what-is-nacos.html
Spring官方文档:
https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/en-us/index.html
二、SpringCloud Nacos 下载安装启动
见:
https://www.cnblogs.com/fanshuyao/p/14577910.html
三、SpringCloud Nacos 作为服务注册发现中心
见:
https://www.cnblogs.com/fanshuyao/p/14577910.html
官方文档:
https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/en-us/index.html#_spring_cloud_alibaba_nacos_discovery
四、SpringCloud Nacos 作为Config配置中心
官方中文文档:
https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/zh-cn/index.html#_spring_cloud_alibaba_nacos_config
英文文档:
https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/en-us/index.html#_spring_cloud_alibaba_nacos_config
Nacos1.4.1报错: longPolling error ,java.util.concurrent.RejectedExecutionException 解决方案:
https://www.cnblogs.com/fanshuyao/p/14572830.html
SpringCloud Nacos 作为Config配置中心步骤:
1、pom.xml文件引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version><!-- Hoxton.SR10 -->
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.5.RELEASE</version><!-- 当Nacos的版本为:1.4.1,必须使用2.2.5.RELEASE版本,不然Nacos配置在第一次更新后会报错,后面再也更新不了,因为版本不一致导致的 -->
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2、添加bootstrap.properties配置文件
bootstrap文件优先级高于application.properties
注意(都是官方文档说的):
(1)必须使用 bootstrap.properties配置文件来配置 Nacos Server 地址
(2)${spring.profiles.active}当通过配置文件来指定时必须放在 bootstrap.properties 文件中。
具体内容是:
#必须使用 bootstrap.properties配置文件来配置 Nacos Server 地址
#${spring.profiles.active}当通过配置文件来指定时必须放在 bootstrap.properties 文件中。
#bootstrap.properties,bootstrap文件优先级高于application.properties
#spring.devtools.restart.enabled=false
spring.profiles.active=dev
server.port=8805
spring.application.name=SPRING-CLOUD-NACOS-CONSUMER
#配置nacos服务地址,通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能:
#单机配置:127.0.0.1:8848
#集群配置:192.168.170.11:8848,192.168.170.12:8848,192.168.170.13:8848
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
#服务提供者的服务名,接口调用需要用到
my.nacos.service.name=SPRING-CLOUD-NACOS-SERVICE
#配置中心,相关配置
#配置文件的后缀,默认值是:properties,可以配置成:yaml
spring.cloud.nacos.config.file-extension=properties
#配置文件更新的服务地址
#单机配置:127.0.0.1:8848
#集群配置:192.168.170.11:8848,192.168.170.12:8848,192.168.170.13:8848
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#完全关闭 Nacos Config 的自动化配置
#spring.cloud.nacos.config.enabled=false
#DataId 默认使用 `spring.application.name` 配置跟文件扩展名结合(配置格式默认使用 properties), GROUP 不配置默认使用 DEFAULT_GROUP。因此该配置文件对应的 Nacos Config 配置的 DataId 为 nacos-config.properties, GROUP 为 DEFAULT_GROUP
#DataId匹配模式
#Nacos DataId的格式:
#${spring.profiles.active}为空时:${spring.application.name}.${file-extension:properties}
#${spring.profiles.active}不为空时:${spring.application.name}-${spring.profiles.active}.${file-extension:properties}
#若spring.application.name=SPRING-CLOUD-NACOS-CONSUMER,且spring.profiles.active=dev,则Nacos服务配置的DataId就是:SPRING-CLOUD-NACOS-CONSUMER-dev.properties
#若spring.application.name=myconfig,且无spring.profiles.active配置,则Nacos服务配置的DataId就是:myconfig.properties
#指定特定的DataId配置文件
#从默认的组DEFAULT_GROUP取配置名为aaa.properties进行更新
#如果设置了组:spring.cloud.nacos.config.group,则在Nacos服务配置时,Group属性就必须一致
#spring.cloud.nacos.config.name=aaa.properties
#Group匹配模式:
#当使用spring.cloud.nacos.config.group,在Nacos服务配置时,Group属性就必须一致,而DataId还是原来的匹配规则,只是定义了一个组,只能从该组取,默认的组是DEFAULT_GROUP,没有配置组,就是从默认组取
spring.cloud.nacos.config.group=mygroup
#命名空间(namespace)模式
#Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
#在没有明确指定 ${spring.cloud.nacos.config.namespace} 配置的情况下, 默认使用的是 Nacos 上 Public 这个namespae。
#在命名空间管理,新增自定义命名空间:dev,命名空间ID不用填写,自动生成,保存后把命名空间ID复制,赋值给spring.cloud.nacos.config.namespace
#匹配方式是:
#若spring.application.name=SPRING-CLOUD-NACOS-CONSUMER,且spring.profiles.active=dev,则Nacos服务配置的DataId就是:SPRING-CLOUD-NACOS-CONSUMER.properties,而命名空间的名称就是dev,和spring.profiles.active配置一致
#spring.cloud.nacos.config.namespace=81671a8b-7994-4142-9be9-029360875ad7
#配置的优先级
#Nacos Config 目前提供了三种配置能力从 Nacos 拉取相关的配置
#A: 通过 spring.cloud.nacos.config.shared-dataids 支持多个共享 Data Id 的配置
#B: 通过 spring.cloud.nacos.config.ext-config[n].data-id 的方式支持多个扩展 Data Id 的配置
#C: 通过内部相关规则(应用名、应用名+ Profile )自动生成相关的 Data Id 配置
#服务端如何开启鉴权
#当服务端开启鉴权:nacos.core.auth.enabled=true后,客户端访问需要账号和密码,当前的配置,服务注册中心和配置中心都可以正常访问
#服务注册中心、服务配置中心的同时配置的账号和密码
#spring.cloud.nacos.username=nacos
#spring.cloud.nacos.password=nacos
#服务注册中心配置的账号和密码:
#spring.cloud.nacos.discovery.username=nacos
#spring.cloud.nacos.discovery.password=nacos
#服务配置中心的账号和密码:
#spring.cloud.nacos.config.username=nacos
#spring.cloud.nacos.config.password=nacos
#配置如下:
#spring.cloud.nacos.username=nacos
#spring.cloud.nacos.password=nacos
#测试配置的值
config.text=1
3、application.properties配置文件修改
测试bootstrap文件优先级高于application.properties,application.properties配置的属性,会覆盖bootstrap.properties的属性,因为bootstrap.properties先加载。
#测试配置的值
config.text=application.properties-1
4、启动类
加上@EnableDiscoveryClient注解
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* 通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能:
*
*/
@SpringBootApplication
@EnableDiscoveryClient
public class SpringCloud8805NacosWebApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloud8805NacosWebApplication.class, args);
}
}
5、Controller请求类
加上@RefreshScope,实现Nacos配置文件的动态刷新,不加不会刷新。
@RefreshScope不能配置在启动类上,无效果。
@RefreshScope作用域是:ElementType.TYPE, ElementType.METHOD
实现配置文件:config.text=xxx的动态更新
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import com.lqy.springCloud.Result;
//@RefreshScope:实现Nacos配置文件的动态刷新,不能配置在启动类上,无效果,作用域是:ElementType.TYPE, ElementType.METHOD
@RefreshScope
@RestController
@RequestMapping("/web")
public class WebController {
@Value("${config.text}")
private String configText;
@RequestMapping(value="/config", produces = MediaType.APPLICATION_JSON_VALUE)
public Result config() {
return Result.ok(configText);
}
}
五、SpringCloud Nacos Config配置中心动态更新
1、启动Nacos Server
在bin路径(D:\0soft\nacos-server-1.4.1\nacos\bin)打开cmd命令窗口,输入下面的命令启动:
startup.cmd -m standalone
2、浏览器打开Nacos Server控制台
http://127.0.0.1:8848/nacos
登录名:nacos
密码:nacos
3、配置管理
展开【配置管理】,点击【配置列表】,在最右边有一个加号的添加按钮,添加相应的配置
六、项目实现配置文件动态刷新,bootstrap.properties增加配置
#配置文件的后缀,默认值是:properties,可以配置成:yaml
spring.cloud.nacos.config.file-extension=properties
#配置文件更新的服务地址
#单机配置:127.0.0.1:8848
#集群配置:192.168.170.11:8848,192.168.170.12:8848,192.168.170.13:8848
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
七、SpringCloud Nacos Config配置DataId配置规则
DataId 默认使用 spring.application.name
配置跟文件扩展名结合(配置格式默认使用 properties), GROUP 不配置默认使用 DEFAULT_GROUP。因此该配置文件对应的 Nacos Config 配置的 DataId 为 nacos-config.properties, GROUP 为 DEFAULT_GROUP
1、支持DataId匹配模式的配置
Nacos DataId的格式:
${spring.profiles.active}为空时:${spring.application.name}.${file-extension:properties}
${spring.profiles.active}不为空时:${spring.application.name}-${spring.profiles.active}.${file-extension:properties}
具体示例:
若spring.application.name=SPRING-CLOUD-NACOS-CONSUMER,且spring.profiles.active=dev,则Nacos服务配置的DataId就是:SPRING-CLOUD-NACOS-CONSUMER-dev.properties
若spring.application.name=myconfig,且无spring.profiles.active配置,则Nacos服务配置的DataId就是:myconfig.properties
指定特定的DataId配置文件
从默认的组DEFAULT_GROUP取配置名为aaa.properties进行更新
如果设置了组:spring.cloud.nacos.config.group,则在Nacos服务配置时,Group属性就必须一致
spring.cloud.nacos.config.name=aaa.properties
2、支持自定义 Group 的配置
当使用spring.cloud.nacos.config.group,在Nacos服务配置时,Group属性就必须一致,而DataId还是原来的匹配规则,只是定义了一个组,只能从该组取,默认的组是DEFAULT_GROUP,没有自定义组,就是从默认组取
spring.cloud.nacos.config.group=mygroup
3、支持自定义 namespace 的配置
Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
在没有明确指定 ${spring.cloud.nacos.config.namespace} 配置的情况下, 默认使用的是 Nacos 上 Public 这个namespae。
在命名空间管理,新增自定义命名空间:dev,命名空间ID不用填写,自动生成,保存后把命名空间ID复制,赋值给spring.cloud.nacos.config.namespace
匹配方式是:
若spring.application.name=SPRING-CLOUD-NACOS-CONSUMER,且spring.profiles.active=dev,则Nacos服务配置的DataId就是:SPRING-CLOUD-NACOS-CONSUMER.properties,而命名空间的名称就是dev,和spring.profiles.active配置一致
spring.cloud.nacos.config.namespace=81671a8b-7994-4142-9be9-029360875ad7
4、支持自定义扩展的 Data Id 配置
Nacos Config 从 0.2.1 版本后,可支持自定义 Data Id 的配置。关于这部分详细的设计可参考 这里。 一个完整的配置案例如下所示:
spring.application.name=opensource-service-provider
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# config external configuration
# 1、Data Id 在默认的组 DEFAULT_GROUP,不支持配置的动态刷新
spring.cloud.nacos.config.ext-config[0].data-id=ext-config-common01.properties
# 2、Data Id 不在默认的组,不支持动态刷新
spring.cloud.nacos.config.ext-config[1].data-id=ext-config-common02.properties
spring.cloud.nacos.config.ext-config[1].group=GLOBALE_GROUP
# 3、Data Id 既不在默认的组,也支持动态刷新
spring.cloud.nacos.config.ext-config[2].data-id=ext-config-common03.properties
spring.cloud.nacos.config.ext-config[2].group=REFRESH_GROUP
spring.cloud.nacos.config.ext-config[2].refresh=true
可以看到:
通过 spring.cloud.nacos.config.ext-config[n].data-id 的配置方式来支持多个 Data Id 的配置。
通过 spring.cloud.nacos.config.ext-config[n].group 的配置方式自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP。
通过 spring.cloud.nacos.config.ext-config[n].refresh 的配置方式来控制该 Data Id 在配置变更时,是否支持应用中可动态刷新, 感知到最新的配置值。默认是不支持的。
注意:
多个 Data Id 同时配置时,他的优先级关系是 spring.cloud.nacos.config.ext-config[n].data-id 其中 n 的值越大,优先级越高。
spring.cloud.nacos.config.ext-config[n].data-id 的值必须带文件扩展名,文件扩展名既可支持 properties,又可以支持 yaml/yml。
此时 spring.cloud.nacos.config.file-extension 的配置对自定义扩展配置的 Data Id 文件扩展名没有影响。
通过自定义扩展的 Data Id 配置,既可以解决多个应用间配置共享的问题,又可以支持一个应用有多个配置文件。
5、配置的优先级
Nacos Config 目前提供了三种配置能力从 Nacos 拉取相关的配置
A: 通过 spring.cloud.nacos.config.shared-dataids 支持多个共享 Data Id 的配置
B: 通过 spring.cloud.nacos.config.ext-config[n].data-id 的方式支持多个扩展 Data Id 的配置
C: 通过内部相关规则(应用名、应用名+ Profile )自动生成相关的 Data Id 配置
八、完全关闭 Nacos Config 的自动化配置
通过设置 spring.cloud.nacos.config.enabled = false 来完全关闭 Spring Cloud Nacos Config
spring.cloud.nacos.config.enabled=false
九、Nacos Config Starter 更多的配置项信息
spring.cloud.nacos.config.server-addr
服务端地址
Nacos Server 启动监听的ip地址和端口
spring.cloud.nacos.config.name
配置对应的 DataId
先取 prefix,再去 name,最后取 spring.application.name
spring.cloud.nacos.config.prefix
配置对应的 DataId
先取 prefix,再去 name,最后取 spring.application.name
spring.cloud.nacos.config.encode
配置内容编码
读取的配置内容对应的编码
spring.cloud.nacos.config.group
GROUP
默认是:DEFAULT_GROUP,配置对应的组
spring.cloud.nacos.config.fileExtension
文件扩展名
默认是:properties,配置项对应的文件扩展名,目前支持 properties 和 yaml(yml)
spring.cloud.nacos.config.timeout
获取配置超时时间
默认是:3000,客户端获取配置的超时时间(毫秒)
spring.cloud.nacos.config.endpoint
接入点
地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址
spring.cloud.nacos.config.namespace
命名空间
常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等
spring.cloud.nacos.config.accessKey
AccessKey,当要上阿里云时,阿里云上面的一个云账号名
spring.cloud.nacos.config.secretKey
SecretKey,当要上阿里云时,阿里云上面的一个云账号密码
spring.cloud.nacos.config.contextPath
Nacos Server 对应的 context path,Nacos Server 对外暴露的 context path
spring.cloud.nacos.config.clusterName
集群,配置成Nacos集群名称
spring.cloud.nacos.config.sharedDataids
共享配置,共享配置的 DataId, "," 分割
spring.cloud.nacos.config.refreshableDataids
共享配置动态刷新,共享配置中需要动态刷新的 DataId, "," 分割
spring.cloud.nacos.config.extConfig
自定义 Data Id 配置,属性是个集合,内部由 Config POJO 组成。Config 有 3 个属性,分别是 dataId, group 以及 refresh
十、Nacos服务端开启鉴权
当服务端开启鉴权:nacos.core.auth.enabled=true后,客户端访问需要账号和密码,当前的配置,服务注册中心和配置中心都可以正常访问
服务注册中心、服务配置中心的同时配置的账号和密码(已经验证)
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=nacos
仅服务注册中心配置的账号和密码(未验证):
#spring.cloud.nacos.discovery.username=nacos
#spring.cloud.nacos.discovery.password=nacos
仅服务配置中心的账号和密码(未验证):
#spring.cloud.nacos.config.username=nacos
#spring.cloud.nacos.config.password=nacos
十一、Nacos Config 对外暴露的 Endpoint
Nacos Config 内部提供了一个 Endpoint, 对应的 endpoint id 为 nacos-config。
Endpoint 暴露的 json 中包含了三种属性:
Sources: 当前应用配置的数据信息
RefreshHistory: 配置刷新的历史记录
NacosConfigProperties: 当前应用 Nacos 的基础配置信息