Spring Cloud 使用 nacos config 实现 配置中心
一、配置中心
配置中心是一个集中化的管理平台,用于存储、管理和动态调整应用程序的配置信息。在现代微服务架构中,尤其是在分布式系统中,各个微服务通常会有大量的配置(如数据库连接信息、API 密钥、服务发现配置、功能开关等)。为了方便配置管理、降低维护成本和提高灵活性,通常会使用配置中心来集中管理这些配置。
配置中心的优点
-
集中管理:
- 所有的配置信息都存储在一个地方,便于查看、修改和维护。
-
灵活性:
- 支持动态更新配置,无需重启应用程序,减少了对生产环境的影响。
-
可扩展性:
- 配置中心通常是分布式的,能够支持大规模的应用和服务。
-
支持版本控制和回滚:
- 支持配置的历史版本管理,可以根据需要回滚到历史版本。
-
多环境管理:
- 配置中心通常支持多环境配置,能够为开发、测试、生产环境提供不同的配置。
配置中心的缺点
- 单点故障问题:
- 如果配置中心的服务宕机或不可用,所有的应用可能无法获取到最新的配置,可能会导致服务故障。
- 性能瓶颈:
- 如果配置中心处理大量的配置请求时,可能会成为性能瓶颈,尤其在高并发场景下。
- 配置泄露风险:
- 配置中心中存储的配置信息可能包含敏感数据,如数据库密码、API 密钥等,必须确保配置中心具备足够的安全性。
常见的配置中心:
1、Nacos:
- Nacos 是阿里巴巴开源的一款动态服务发现、配置管理和服务管理平台。它提供了强大的配置管理功能,支持配置的动态更新,支持多种格式的配置(如 properties, YAML, JSON),并且能够支持多环境、多数据源的配置管理。
2、Apollo:
- Apollo 是携程开源的配置管理中心,专注于分布式配置管理,提供了可视化的界面来管理配置,支持灰度发布、版本回滚等特性。
3、Spring Cloud Config:
- Spring Cloud Config 是 Spring Cloud 提供的一个配置管理解决方案,它使用 Git 或 SVN 作为后端存储系统,支持配置的集中管理。Spring Cloud Config 支持 Spring 应用程序的自动配置,能够在多个微服务之间共享配置。
4、Consul:
- Consul 是一个开源的服务发现和配置管理工具,提供了健康检查、服务发现和配置存储等功能。Consul 的配置存储可以用于存储应用程序的配置,并支持分布式系统的管理。
5、Zookeeper:
- Zookeeper 是一个开源的分布式协调服务,广泛用于分布式系统中的配置管理、服务发现等场景。它也可以作为配置中心,通过存储配置信息来支持服务的动态更新。
二、使用 nacos 实现配置中心
1、 引入依赖 添加配置
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
使用 bootstrap.yml 或 bootstrap.properties (不明白阅读配置文档)
spring:
application:
name: order-service
cloud:
nacos:
server-addr: 127.0.0.1:8848
username: nacos
password: nacos
config:
file-extension: yaml
namespace: dev
extension-configs:
- data-id: cloud.extension-dev-yaml
group: DEFAULT_GROUP_1
refresh: true
shared-configs:
- data-id: cloud.shared-dev-yaml
group: DEFAULT_GROUP_1
refresh: true
2、配置含义:主要针对 spring.cloud.nacos.config
下的配置进行解释,建议 优先阅读上面提到的配置文档
-
namespace 命名空间 默认为 public
-
file-extension 文件扩展名 用于标识默认的配置文件扩展名 默认properties
-
extension-configs 扩展配置 定义某个服务或应用 专属的配置(数组类型)
- data-id 对应配置的data-id
- group 对应配置的 group
- refresh 实时刷新配置变更(
Data Id 需 和 配置的文件类型 保持一致; 默认的配置可不设置(Data Id 前缀)和文件类型正确就可以
)
错误示范(非默认,不含正确文件扩展名)
正确配置(非默认,包含正确文件扩展名)
默认配置(默认,不包含文件扩展名)
-
shared-configs 共享配置 定义多个服务 共同的配置(数组类型)
3、配置优先级
数组类型的配置,相同配置:下标大 的 覆盖下标小的
同时配置的优先级为:profile > 默认配置文件 > extension-configs > shared-configs
profile: 认为 我们在程序中的配置 例如yml
默认配置文件: 认为 ${spring.application.name}-${profile}.${file-extension:properties}
是这个格式的默认配置(不懂的阅读配置文档)
三、启动配置中心
1、若项目不能启动,提示类似于 如下内容:
这是高版本,设置了 禁用 bootstrap 启动配置:
解决方案: 导入新的依赖 (即可解决,启动的问题)
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
2、检验自动刷新配置
在启动类中使用循环输出配置文件,查看配置
public static void main(String[] args) throws InterruptedException {
ConfigurableApplicationContext applicationContext = SpringApplication.run(OrderApplication.class, args);
while (true) {
String userName = applicationContext.getEnvironment().getProperty("user.name");
String userAge = applicationContext.getEnvironment().getProperty("user.age");
System.out.println("userName:" + userName + ";userAge:" + userAge);
String cloudOrder = applicationContext.getEnvironment().getProperty("cloud.order");
String cloudStock = applicationContext.getEnvironment().getProperty("cloud.stock");
System.out.println("cloudOrder:" + cloudOrder + ";cloudStock:" + cloudStock);
TimeUnit.SECONDS.sleep(5);
}
}