本文主要学习和使用Nacos的配置中心
1. Nacos简介
Nacos 是一个开源的服务发现和配置管理平台,主要用于微服务架构中。Nacos 的名字源自于 “Naming and Configuration Service” 的缩写,它提供了两大核心功能:服务发现和服务配置。
特性:
-
服务发现:是微服务架构中的一个关键概念,它允许服务之间相互发现和通信。Nacos支持基于DNS和基于RPC的服务发现。它允许服务提供者在启动时注册自己,并允许服务消费者通过服务名查找服务,从而实现服务之间的解耦;
-
配置中心:动态配置服务是Nacos的另一个重要功能。它允许你在所有环境中以集中和动态的方式管理所有服务的配置。配置的更改可以自动推送到使用该配置的服务,实现配置的热更新;
-
动态 DNS 服务:Nacos支持动态DNS服务,可以通过它管理云原生应用的服务发现和服务管理;
-
服务和元数据管理:Nacos提供了服务的元数据管理功能,可以通过它进行服务信息的存储和查询;
-
动态服务发现、配置、元数据及流量管理:Nacos提供了一系列动态管理功能,帮助用户更好地管理服务。
2. 配置中心介绍
服务配置在软件开发中是一个至关重要的环节,尤其是在分布式系统和微服务架构中,它涉及到如何在多个服务之间管理和分发配置信息。服务配置的主要目的是为了使服务能够适应不同的运行环境,以及能够在运行时动态地调整其行为。
关于配置文件的问题:
- 软件开发的复杂性:随着软件系统变得越来越复杂,它们通常由多个组件和服务组成。这些服务可能运行在不同的环境中(开发、测试、生产等),每个环境可能有不同的配置需求。这就使管理起来很困难;
- 多环境配置:在传统的单体应用中,配置文件通常与环境紧密相关。随着微服务架构的流行,每个微服务可能有自己的配置文件,而且每个环境都需要一套配置。手动管理这些配置容易出错,且难以维护;
- 配置的动态性:现代应用经常需要根据不同的运行时条件动态调整配置。例如,根据负载情况自动扩展服务实例,或者在出现问题时快速切换到备用服务;
- 配置的一致性:在分布式系统中,确保所有服务实例都使用相同的配置是非常重要的。不一致的配置可能导致服务行为异常,影响系统的稳定性和可靠性;
- 安全性:配置文件可能包含敏感信息,如数据库密码、API密钥等。这些信息需要被安全地存储和传输,避免泄露风险。
服务配置的主要需求:
- 集中管理:需要一个中央配置管理服务来统一管理所有服务的配置;
- 动态更新:能够在不重启服务的情况下,动态地更新配置;
- 版本控制:配置的变更需要被版本化,以便追踪变更历史和回滚到之前的配置;
- 环境隔离:不同环境(开发、测试、生产)的配置应该隔离,避免配置混乱;
- 权限控制:对配置的访问需要权限控制,确保只有授权的用户可以修改配置;
- 容错和恢复:配置服务需要具备高可用性,能够在部分故障的情况下继续工作,并且能够从故障中恢复。
服务配置管理平台:
为了满足上述需求,服务配置管理平台如Nacos、SpringCloudConfig、Consul、Apollo等应运而生。这些平台提供了以下功能:
- 服务配置的集中存储和分发;
- 动态配置更新和配置推送;
- 配置版本控制和回滚;
- 环境隔离和配置加密;
- 权限控制和审计日志;
- 高可用性和故障转移机制。
通过使用这些配置管理平台,开发者和运维人员可以更有效地管理和维护分布式系统中的服务配置,从而提高系统的灵活性和可维护性。
简单来说就是我们可以把配置文件里的业务配置统一放到Nacos中管理(SpringBoot的application.yaml),在项目运行期间还可以动态的修改
3. Nacos安装
需要确保系统上具有Java环境
java -version
3.1 Windows安装
- 下载
Nacos官网
Github地址
-
解压
-
配置MySQL数据库,新建nacos数据库,并执行
nacos/conf
下面的mysql-schema.sql(非必须) -
根据需要修改
nacos/conf
下面的application.properties配置文件# 当配置了数据库,需要把下面这五项去掉注解,改成自己的 spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC db.user.0=root db.password.0=root # nacos.core.auth.enabled登录校验,为true时需要登录,为false不需要登录 nacos.core.auth.enabled=true # 需要登录时,未配置数据库则使用一下配置作为用户名和密码 nacos.core.auth.system.username=nacos nacos.core.auth.system.password=nacos # 设置客户端连接key、value nacos.core.auth.server.identity.key=nacos nacos.core.auth.server.identity.value=nacos # 公开默认值,可用于临时测试,实际使用时请务必更换为自定义的其他有效值。(必填) nacos.core.auth.default.token.secret.key=VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg= nacos.core.auth.plugin.nacos.token.secret.key=VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg= # 权限,默认是所有权限(非必填) nacos.core.auth.system.authority=nacos # 改为false,不然可能会绕过权限检验 nacos.core.auth.enable.userAgentAuthWhite=false
-
启动Nacos,在
nacos/bin
下面,命令行startup.cmd -m standalone
,由于是单机启动,要加standalone
-
访问Nacos控制台
启动Nacos后,可以通过浏览器访问Nacos的控制台,默认地址为http://localhost:8848/nacos。
3.2 Linux(CentOS7)安装
-
下载Nacos
从Nacos的GitHub tag页面下载最新的Nacos安装包,找到对应版本压缩包,鼠标右键复制链接地址。例如,使用wget命令下载:
wget https://github.com/alibaba/nacos/releases/download/2.2.1/nacos-server-2.2.1.tar.gz
-
解压安装包
下载完成后,解压安装包到指定目录,版本指定自己的:
tar -xzf nacos-server-2.3.2.tar.gz mv nacos /usr/local
-
修改配置,可以按照上面Windows根据实际情况修改
-
启动Nacos
进入Nacos的bin目录,然后启动Nacos服务。Nacos默认是以单机模式启动:
cd /usr/local/nacos/bin sh startup.sh -m standalone
-
设置开机自启(可选)
如果希望Nacos开机自启,可以将启动命令添加到/etc/rc.d/rc.local文件中:
echo 'sh /path/to/nacos/bin/startup.sh -m standalone' >> /etc/rc.d/rc.local
确保/etc/rc.d/rc.local文件具有执行权限
chmod +x /etc/rc.d/rc.local
3.3 Docker安装
确保系统安装了Docker
-
拉取Nacos镜像
docker pull nacos/nacos-server
-
修改配置文件
vim /mydata/nacos/init.d/custom.properties
-
运行Nacos容器
docker run -d --name nacos-standalone -e MODE=standalone -p 8848:8848 nacos/nacos-server
如果需要使用自定义的配置文件,可以将本地配置文件挂载到容器中:
docker run -d --name nacos-standalone -e MODE=standalone -p 8848:8848 -v /path/to/your/logs:/home/nacos/logs -v /path/to/your/application.properties:/home/nacos/conf/application.properties nacos/nacos-server
这里的参数说明如下:
-
-d
:后台运行容器。 -
--namenacos-standalone
:指定容器名称。 -
-eMODE=standalone
:指定运行模式为单机模式。 -
-p8848:8848
:映射端口,将容器的8848端口映射到宿主机的8848端口。 -
-v/path/to/your/application.properties:/home/nacos/conf/application.properties
参数用于将本地的application.properties
文件挂载到容器的/home/nacos/conf
目录下
-
-
访问Nacos控制台
-
停止和删除容器(可选)
当需要停止Nacos服务时,可以使用以下命令:
docker stop nacos-standalone
如果要删除容器,可以使用以下命令:
docker rm nacos-standalone
4. Nacos配置中心的使用
基于SpringBoot的项目
4.1快速使用Demo
-
项目目录结构
-
添加依赖pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.thkl</groupId> <artifactId>Nacos-Service</artifactId> <packaging>jar</packaging> <name>Nacos-Service</name> <version>1.0-SNAPSHOT</version> <parent> <!-- SpringBoot版本 --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.5.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Nacos配置中心依赖 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>2.2.2.RELEASE</version> </dependency> <!-- Nacos注册中心依赖,可不添加,用不到 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.2.2.RELEASE</version> </dependency> <!-- Springboot是2.4以上的版本,增加以下依赖 --> <!-- <dependency> --> <!-- <groupId>org.springframework.cloud</groupId> --> <!-- <artifactId>spring-cloud-starter-bootstrap</artifactId> --> <!-- </dependency> --> </dependencies> <build> </build> </project>
-
配置文件
配置文件优先级(由高到低):
bootstrap.properties->bootstrap.yml->application.properties->application.yml
建议把nacos配置放在
bootstrap.properties
或bootstrap.yml
这里面,不然有一些配置可能不生效spring: cloud: nacos: config: # Nacos Config 服务地址 server-addr: 127.0.0.1:8848 # 配置分组 group: DEFAULT_GROUP # 配置命名空间 namespace: public # Data ID prefix: nacos-service # 配置文件扩展名 file-extension: yaml
其他配置放在application.***里
server: port: 8081 spring: application: name: nacos-service profiles: active: dev
-
应用启动类
在SpringBoot应用的启动类上添加@EnableDiscoveryClient注解:
@SpringBootApplication @EnableDiscoveryClient public class NacosApplication{ public static void main(String[] args) { SpringApplication.run(NacosApplication.class, args); } }
-
Nacos配置文件管理
SpringBoot会自动加载Nacos配置中心的配置文件。在Nacos控制台中,可以创建和修改配置文件,
配置管理->配置列表
。
-
使用配置
在SpringBoot应用中,可以通过@Value注解、@ConfigurationProperties注解或@Environment 对象来注入配置,一定一定要加个默认值,不然读取不到Nacos配置中心的值时会报错。
@Value("${com.thkl.username:default}") private String username; @ConfigurationProperties(prefix = "com.thkl.username") public class MyConfigProperties { private String username; }
具体使用
@RestController @RefreshScope public class NacosController { @Value("${com.thkl.username:thkl}") private String username; @GetMapping("user") public String userInfo(){ return "获取nacos中配置:" + username; } }
-
启动访问
4.2 Nacos配置属性
Data Id
Data Id配置文件的唯一标识,Data Id命名匹配规则如下:
${prefix}-${spring.profiles.active}.${file-extension}
${prefix}.${file-extension}
${prefix}
prefix
:默认是spring.cloud.nacos.config.prefix
的值,如果没有配置则使用spring.application
的值spring.profiles.active
:对应的环境pro
、dev
等file-extension
:配置文件扩展名,spring.cloud.nacos.config.file-extension
的值,支持多种文件格式text、json、xml、yaml、html、properties、toml- 按从上往下的优先级依次匹配
命名空间
进行配置文件的不同环境隔离,开发、测试、生产环境等。
可以在左侧菜单命名空间
进行命名空间的创建和编辑
在项目Nacos配置文件中需要指定对应的命名空间,指定的是命名空间ID
spring.cloud.nacos.config.namespace=命名空间ID
分组
进行业务隔离
在项目Nacos配置文件中需要指定对应的分组
spring.cloud.nacos.config.group=xxx
动态刷新
如果配置文件发生改变,项目可以实时刷新新内容
在需要获取配置内容的地方加上@RefreshScope
注解
@RestController
// 动态刷新
@RefreshScope
public class UserController {
@Value("${com.thkl.username:thkl}")
private String username;
@GetMapping("user")
public String userInfo(){
return "获取nacos中配置:" + username;
}
}
还需在Nacos配置文件中开启动态刷新
spring.cloud.nacos.config.refresh-enabled=true
多文件配置
当环境中引入的中间件较多时,可以配置多个文件,方便管理维护
spring:
cloud:
nacos:
config:
shared-configs[0]:
data-id: nacos-service
group: DEFAULT_GROUP
refresh: true
shared-configs[1]:
data-id: nacos-service-dev
group: DEFAULT_GROUP
refresh: true
4.3 nacos存放哪些配置信息,为什么不把Spring的所有配置都放到nacos上
Nacos配置中心主要用于存储和管理微服务架构中的配置信息,它支持多种配置格式,如properties、yaml、json等。Nacos存放的配置信息通常包括:
- 服务发现相关配置:包括服务地址、端口、实例元数据等;
- 配置中心相关配置:如命名空间、配置分组、配置文件扩展名等;
- 应用配置:应用的基本配置,如数据库连接信息、缓存配置、日志级别等;
- 环境变量:应用运行时所需的环境变量;
- 业务逻辑配置:应用的业务逻辑配置,如功能开关、限流阈值等。
Nacos不建议将Spring的所有配置都放到Nacos上,原因如下:
- 性能考虑:Spring的某些配置(如Bean定义)是运行时动态加载的,如果这些配置也放在Nacos上,可能会导致Nacos的性能问题;
- 配置分离:将配置分为不同的层级,如应用配置、业务配置等,可以更好地组织和管理配置数据;
- 安全性:不是所有的配置都需要动态更新。例如,Bean定义、JPA实体类等配置通常是不需要动态更新的,因此没有必要放在Nacos上;
- 隔离性:将配置放在Nacos上可能会影响其他不使用Nacos的应用。例如,如果一个应用使用Nacos进行配置管理,而另一个应用使用Spring Cloud Config,两者可能会产生冲突。
Nacos主要用于管理那些需要动态更新、共享或隔离的配置信息。对于那些不需要动态更新的配置,可以继续使用 Spring Cloud Config或其他配置管理工具。通过这种方式,可以实现配置的集中管理和动态更新,同时保持系统的灵活性和可维护性。
标签:服务,配置文件,spring,配置,nacos,Nacos,简单 From: https://blog.csdn.net/qq_54041019/article/details/140363383