哈喽各位同学们大家好呀,今天是开发者学院中课程“Spring Cloud微服务架构设计与开发实战”的章节三的“Nacos作为Spring Cloud配置中心”干货总结~是一起学习新课程吧!
课程链接以及图谱地址小编已经为大家指路了,搭配学习效果更佳👇
课程名称:Nacos作为Spring Cloud配置中心
课程地址:https://developer.aliyun.com/learning/course/60/detail/1098
图谱名称:Alibaba Java 技术图谱
图谱地址:https://developer.aliyun.com/graph/java
Nacos作为Spring Cloud配置中心
(一)Nacos作为Spring Cloud配置中心
1、Nacos配置中心
阿里开源Nacos的另外一个功能,统一配置中心,是对于方式集群大规模集群非常重要的一个功能点,阿里开源Nacos,实际是集注册中心和配置中心为一身,是一个非常全能的工具。
Nacos启动阶段配置文件稍微特殊一点,有一个bootstrap文件 ,是加载普通配置之前执行的一个动作,优先启动的一个文件系统,会优先读取文件中的一些配置数据。
- Spring Cloud Alibaba Nacos Config
- Nacos提供用于存储配置和其他元数据的 key/value 存储,
- 为分布式系统中的外部化配置提供服务器端和客户端支持。
- 使用Spring Cloud Alibaba Nacos Config,
- 可以在Nacos Server 集中管理Spring Cloud 的外部属性配置。
- Alibaba Nacos Config 是Config Server 和Client 的替代方案,
- 客户端和服务器上的概念与 Spring Environment 和PropertySource有 着一致的抽象,
- bootstrap 启动阶段,配置被加载到 Spring 环境中。
- 当应用程序通过部署管道从开发到测试再到生产时,
- 可以管理不同环境dev\test\pro的配置,
- 并确保应用程序具有迁移时需要运行的所有内容。
2、Nacos配置服务
- Nacos也支持配置服务;
- 统一微服务集群的配置信息;
- 支持配置的动态更新;
- 可支持profile粒度的配置;
- 支持自定义 namespace 的配置,做资源管理配置,数据可到开发测试,生产环境有了命名空间,里面找对应的一个配置数据,进行推送下发,主要便于实现配置的更新和推送管理;
- 支持自定义 Group 的配置,主要是分组去管理服务的;
- 支持自定义扩展的 Data Id 配置;
- 配置的优先级;
- 可以通过Spring的${spring.profiles.active} 配置多套环境;
- 微服务项目需要spring-cloud-starter-alibaba-nacos-config;
- 支持两种配置文件格式:
bootstrap.properties
bootstrap.yml
(二)微服务集成Nacos配置中心
1、Nacos配置中心实战
•启动Nacos服务
•Nacos添加配置参数
•修改客户端,连接Nacos配置中心
•注意:
版本2.1.x.RELEASE对应的是Spring Boot 2.1.x 版本。
版本2.0.x.RELEASE对应的是Spring Boot 2.0.x 版本,
版本1.5.x.RELEASE对应的是Spring Boot 1.5.x 版本。
2、客户端配置
•<dependency>
•<groupId>com.alibaba.cloud</groupId>
•<artifactId>spring-cloud-starter-alibaba-nacosconfig</artifactId>
•</dependency>
3、微服务集成Nacos配置中心
•bootstrap.propertie配置Nacos Server 地址
•spring.application.name=nacos-config
•spring.cloud.nacos.config.server-addr=127.0.0.1:8848
4、Nacos支持动态刷新配置
•通过配置 spring.cloud.nacos.config.refresh.enabled=false 来关闭动态刷新
动态更新,启动的更新本质上是自动会刷新配置,一边改完以后,另一边会迅速读到通过线程读取,线程去远端去进行拉取操作。
原始的APP协议,本身并不是双工通信,是单向的。
- 更新配置实战效果
6、Spring Cloud配置参数变
7、Spring Cloud配置参数变化
- Spring Cloud配置参数变化
- Nacos配置中心其他功能
实战案例
配置服务可以是普通的微服务项目,普通微服务项目改造config依赖,因为要实现配置,如简单的配置推送拉取,这是config独有的。
配置文件定义就按照下图规则来做
关键的配置,选的活动状态是dev,dev模式就是开发环境,要保证和配置中心要统一,这里端口稍微改了,8787,通过这样一个配置,读取Nacos配置中心最新的配置数据,然后在本地做一个展示。
本地展示,通过拟定了一个简单动态的变量来测试,主要是定义了一个用户名,一个密码,两个变量,通过围绕注解,让它自动去加载最新的变量值。
启用注解,refresh主要作用自动去背后线程去拉取注册中心最新的值。
默认值,一个是Java,一个是1234qwer。
通过接口来调用,返回最新的用户密码,所以这里面如果之前用户和密码是Java和1234qwer的话,正常配置中心推送完新的配置后,重新查询,就应该返回新的值。
正常加载bootstreap再加载 Applcation
- 支持profile粒度的配置
•spring-cloud-starter-alibaba-nacos-config 在加载配置的时 候,不仅仅加载了以dataid 为${spring.application.name}.${file-extension:properties} 为前 缀的基础配置。
•还加载了dataid为 ${spring.application.name}${profile}.${file-extension:properties} 的基础配置。
•在日常开发中如果遇到多套环境下的不同配置,可以通过Spring 提供的 ${spring.profiles.active} 这个配置项来配置。
•spring.profiles.active=dev
•spring.profiles.active=test
•spring.profiles.active=pro
- 支持自定义 namespace 的配置
• 用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配 置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离 等。
•在没有明确指定 ${spring.cloud.nacos.config.namespace} 配置的情况下, 默认使用的是 Nacos 上 Public 这个namespae。如果需要使用自定义的命 名空间,可以通过以下配置来实现:
•spring.cloud.nacos.config.namespace=b3404bc0-d7dc-4855-b519570ed34b62d7
•该配置必须放在 bootstrap.properties 文件中。此外 spring.cloud.nacos.config.namespace 的值是 namespace 对应的 id, id 值可以在 Nacos 的控制台获取。并且在添加配置时注意不要选择其他的 namespae,否则将会导致读取不到正确的配置。
- 支持自定义 Group 的配置
•在没有明确指定 ${spring.cloud.nacos.config.group} 配置的情 况下, 默认使用的是 DEFAULT_GROUP 。
•如果需要自定义自己的 Group,可以通过以下配置来实现:
•spring.cloud.nacos.config.group=DEVELOP_GROUP
•该配置必须放在 bootstrap.properties 文件中。并且在添加配 置时 Group 的值一定要和 spring.cloud.nacos.config.group 的配置值一致。
- 支持自定义扩展的 Data Id 配置
• Spring Cloud Alibaba 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.extension-configs[0].data-id=ext-config-common01.properties
• # 2、Data Id 不在默认的组,不支持动态刷新
• spring.cloud.nacos.config.extension-configs[1].data-id=ext-config-common02.properties
• spring.cloud.nacos.config.extension-configs[1].group=GLOBALE_GROUP
• # 3、Data Id 既不在默认的组,也支持动态刷新
• spring.cloud.nacos.config.extension-configs[2].data-id=ext-config-common03.properties
• spring.cloud.nacos.config.extension-configs[2].group=REFRESH_GROUP
• spring.cloud.nacos.config.extension-configs[2].refresh=true
- 配置的优先级
•Spring Cloud Alibaba Nacos Config 目前提供了三种配置能力 从 Nacos 拉取相关的配置。
•A: 通过 spring.cloud.nacos.config.shared-configs[n].data-id 支持多个共享 Data Id 的配置
•B: 通过 spring.cloud.nacos.config.extensionconfigs[n].data-id 的方式支持多个扩展 Data Id 的配置
•C: 通过内部相关规则(应用名、应用名+ Profile )自动生成相关的 Data Id 配置
•当三种方式共同使用时,他们的一个优先级关系是:A < B < C