Nacos是综合型解决方案
服务治理
服务的发现
配置管理
一、Nacos的启动方式
nacos:注册中心
解压到,非中文名的文件夹下,进入bin目录中,在路径处,输入cmd打开密令窗口
正常启动命令:startup.cmd -m standalone
集群启动命令:startup.cmd -m cluster
验证是否成功启用: http://localhost:8848/nacos
二、配置管理
提交和获取配置信息
提交配置信息:post请求http://localhost:8848/nacos/v1/cs/configs地址发送请求提交配置信息dataId、group、content三个参数,content为配置内容
获取配置信息:get请求http://localhost:8848/nacos/v1/cs/configs地址发送请求获取配置信息dataId、group两个参数
nacos数据库支持
默认数据库
默认使用的嵌入式数据库,增删改查不方便
Mysql数据库
⑴ 创建数据库添加表结构
可以使用mysql数据库进行存储nacos数据,在数据库中创建nacos_config库,执行nacos/conf/nacos-mysql.sql文件,创建表结构和数据
⑵ 修改nacos配置文件
修改nacos1.4.2\conf\application.properties文件,将数据库信息修改完整
IP地址、库名、账号、密码等,配置信息如下:
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=root
修改完成后,运行nacos
⑶ 添加配置信息
点击+按钮
添加配置信息,配置格式固定,并点击提交按钮
⑷ 查看数据是否已经存在数据库中
三、在Maven项目中获取配置信息
添加依赖
<dependency>
<groupId>***.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.3.2</version>
</dependency>
编写获取配置信息的类
public class SimpleDemoMain {
public static void main(String[] args) throws NacosException {
// nacos的访问地址
String serverAddr = "192.168.16.125:8848";
// data id
String dataId = "nacos-simple-demo.yaml";
// group
String group = "DEFAULT_GROUP";
// 创建properties属性,作用是将dataId和group两个属性放进去,先创建出来
Properties properties = new Properties();
// 指定nacos地址添加到properties属性中
properties.put("serverAddr", serverAddr);
// 获取配置
ConfigService configService = NacosFactory.createConfigService(properties);
// 传递的三个属性:dataId、group、超时时间
String config = configService.getConfig(dataId, group, 5000);
System.out.println("配置信息:" + config);
}
}
四、配置模型
对于nacos的配置管理,通过Namespace命名空间、group分组、Data ID文件名称,能够定位到一个配置集
配置集(data ID)
一个配置文件就是一个配置集,一个配置集可以包含系统的各种配置信息,例如:一个配置集可以包含了数据源、线程池、日志级别等配置项,每个配置集可以定义一个有意义的名称,就是配置集的ID即Data ID
配置项
配置集中包含的一个个的配置内容就是配置项,它代表一个具体的可配置的参数与其值域,通常以key=value的形式存在,例如:配置系统的日志输出级别 logLevel=INFO|WARN|EROR 就是一个配置项
配置分组(Group)
配置分组是对配置集进行分组,通过一个有意义的字符串来表示,不同的配置分组下可以有相同的配置集(Data ID),当在Nacos上创建一个配置时,如果未填写配置分组名称,则配置分组的名称默认采用DEFAULT_GROUP,配置分组的常用场景:可用于区分不同的项目或应用,例如:学生管理系统的配置集可以定义group为:STUDENT_GROUP
命名空间(Namespace)
命名空间可用于进行不同环境的配置隔离,例如可以隔离开发环境、测试环境和生产环境,因为他们的配置各不相同,或者时隔离不同的用户,不同的开发人员使用同一个nacos管理各自的配置,可通过namespace隔离,不同的命名空间下,可以存在相同名称的配置分组(Group)或配置集
最佳实践
Namespace:代表不同环境,如:开发、测试、生产环境;
Group:代表某项目,如XX医疗项目、XX电商项目
DataId:每个项目下往往有若干个工程,每个配置集(DataId)是一个工程的主配置文件
五、命名空间(namespace)
创建命名空间
作用:将配置信息进行隔离
通过项目读取配置信息
Nacos中的数据
向properties属性中添加命名空间ID,就会从指定的命名空间中读取配置信息,
properties属性中不添加命名空间ID,默认会读取保留空间(public)的配置信息
六、导航菜单栏(配置管理)
配置列表
命名空间的切换
增、删、批量删、遍历、详情、查询等
导出、导入:可以将配置文件导出到本地,可以将配置文件从本地导入到nacos页面
克隆:可以将一个命名空间的配置文件克隆到另一个命名空间
历史版本
命名空间的切换
通过Data ID和Group查询历史修改记录
查看历史修改记录的详情
可以通过历史记录进行回滚
监听查询
当后台有程序进行监听nacos配置修改情况时,可以查询到监听的地址
也可以通过服务器IP地址查询监控的配置Data ID和Group
后端监听代码
运行结果
七、登录管理
添加依赖
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>5.5.4</version>
</dependency>
获取加密的密码
代码如下:
public static void main(String[] args) {
// 获取加密密码
String encode = new BCryptPasswordEncoder().encode("123");
System.out.println("加密后的密码:"+encode);
}
运行结果:123:$2a$10$k91omOHSw36IqsjxpiTlw.M93m.ZZWXlZ***ppfS52c2sZmYAJRmQy
添加数据库用户信息
Sql:向用户表和角色表添加信息,将生成的密码添加进去
INSERT INTO USERS(username,PASSWORD,enabled) VALUES('小马','$2a$10$o/OZjz/JOO/Vi0H4iu9LeeOdtunj4ru35IJQrxAUdbrQCbA9gUCWW',true);
INSERT INTO roles (username,role) VALUES('小马','ROLE_ADMIN');
测试登录
设置免登录
修改nacos1.4.2\conf\application.properties配置文件,配置信息如下
spring.security.enabled=false
management.security=false
security.besic.enabled=false
nacos.securtiy.ignore.urls=/**
修改后重新启动nacos,关闭浏览器重新访问:localhost:8848/nacos
八、在Maven项目中动态读取配置
子项目继承父项目
父子项目中添加依赖
⑴ 父项目中添加依赖,设置好版本,小心版本冲突问题
<!--表示为父工程,方便进行管理-->
<packaging>pom</packaging>
<properties>
<project.build.sourceEncoding>UTF_8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF_8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>***.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.3.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
⑵ 子项目中添加依赖
<artifactId>service1</artifactId>
<dependencies>
<dependency>
<groupId>***.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
添加读取nacos的yml配置文件
注意:该配置要放在bootstrap.xml配置文件中,千万不要放在application.xml配置文件中,bootstrap.xml优先级大于application.xml的优先级,文件拓展名dataId和测试组名称要与nacos中对应,namespace是nacos中的命名空间id,一定要与nacos的各属性名称一致
spring:
application:
name: service1
cloud:
nacos:
config:
# 配置中心地址
server-addr: 192.168.16.125:8848
# 配置文件扩展名 data ID的名称就是application的name加file-extension service1.yaml
# 如果这里是properties文件,就设置为:properties,相对应配置文件扩展名 data ID就为service1.properties
file-extension: yaml
# 开发环境,这里的值是nacos中的命名空间id,从nacos中获取
namespace: 5149b373-af61-4bdd-a19c-589d2c71179e
# 测试组,从nacos中获取
group: TEST_GROUP
设置启动类,测试读取配置信息
⑴ 设置启动类=>测试静态读取配置信息=>测试动态读取信息
这里直接在启动类进行的测试,可以自定义controller类进行测试
⑵ Nacos中配置信息:
⑶ 运行项目查看配置结果是否一致:
自定义拓展dataId(实现读取多个nacos配置文件)
⑴ 添加配置进行测试(方法一建议使用)
在bootstrap.xml配置文件中添加配置
# 读取多个配置文件,下标从0开始
ext-config[0]:
# 设置dataId 如果不设置group默认为DEFAULT_GROUP
data-id: ext-config-***mon01.properties
# 未设置动态刷新配置,所以在nacos中修改会不会刷新
ext-config[1]:
data-id: ext-config-***mon02.properties
group: GLOBALE_GROUP
# 设置了动态配置所以可以动态刷新
ext-config[2]:
data-id: ext-config-***mon03.properties
group: REFRESH_GROUP
# 动态刷熊
refresh: true
进行测试:
测试结果:
Nacos中的配置:
⑵ 添加配置进行测试(方法二不建议使用)
注意:这个配置方式只能识别分组名称为DEFAULT_GROUP(默认)的文件,在bootstrap.xml配置文件中添加配置
# 读取多个nacos配置文件,只识别组名为DEFAULT_GROUP(默认)的文件
shared-dataids: ext-config-***mon01.properties,ext-config-***mon02.properties,ext-config-***mon03.properties
# 设置文件可以动态刷新配置文件
refreshable-dataids: ext-config-***mon01.properties
进行测试:
测试结果:
Nacos中的配置:
配置的优先级(看图)
九、nacos集群
至少三个nacos
修改nacos\conf\application.properties文件
将每个nacos文件的端口号设置成不同的例如:8848、8849、8850
设置ip地址:127.0.0.1
修改完成后,项目的配置文件也要修改ip地址和端口号,多个用逗号分割
修改nacos\conf\cluster.conf.example文件
文件名修改为cluster.conf
修改里面内容,格式为:ip地址:端口号,分别指定所有nacos,例如:
192.168.16.101:8847
192.168.16.102:8848
192.168.16.103:8849
启动所有nacos
集群启动命令:startup.cmd -m cluster
当nacos启动后,有一个nacos宕机后,nacos还可以正常使用