目录
一、快速入门
1.1 发布配置
1.2 nacos client远程获取配置
1.2.1 导入坐标
1.2.2 程序代码
二、Nacos配置管理基础应用
2.1 Nacos配置管理模型
2.1.2 配置集(Data Id)
2.1.3 配置项
2.1.4 配置分组 (Group)
2.1.5 命名空间(Namespace)
2.1.6 最佳实践(总结)
2.2 命名空间管理
2.2.1 namespace隔离设计
2.2.2 命名空间管理
2.3 测试命名空间
2.3.1 发布新配置集
2.3.2 获取新配置项
2.4 监听查询功能操作
2.4.1 监听查询功能介绍
2.4.2 代码功能展示
2.5 登录管理
2.5.1 修改默认用户名/密码
2.5.2 BCrypt的maven坐标
2.5.3 代码实现修改密码
2.5.4 新增用户名和密码
一、快速入门
1.1 发布配置
浏览器访问http://127.0.0.1:8848/nacos,打开nacos控制台,并点击菜单配置管理->配置列表:
Data ID: nacos‐simple‐demo.yamlGroup : DEFAULT_GROUP配置格式 : YAML配置内容: common:config1: something
但是我在发布的时候,出现了“发布失败,请检查参数是否正确”错误
可能原因:
1、MySQL版本与nacos版本不对应,1.4.0以下使用的mysql驱动是8.0以下的,1.4.0以上使用的驱动就是8.0以上的,使nacos和数据库的版本对应。
2、检查自己的mysql数据库是否有错误,我用的是这个sql文件导入的,如果是这个文件导入的话,记得看第三条
3、可以阅读下面这篇文章Docker部署nacos 添加配置文件提示: 发布失败。请检查参数是否正确。_侣行gxn的博客-CSDN博客_发布失败。请检查参数是否正确。
4、建议使用nacos稳定版本,下面是nacos官方文档,可以在里面下载
Nacos 快速开始
1.2 nacos client远程获取配置
1.2.1 导入坐标
首先自己创建一个maven工程使用,导入下面依赖(因为我的版本是2.1.1,所以我导入的是2.1.1)
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>2.1.1</version>
</dependency>
1.2.2 程序代码
获取某配置集的代码 :获取配置集需要指定:1 、 nacos服务地址,必须指定 比如: 127.0.0.1:88482 、 namespace ,如不指定默认 public3 、 group ,如不指定默认 DEFAULT_GROUP4 、 dataId,必须指定 比如: nacos-simple-demo.yaml
public class SimpleDemoMain {
public static void main(String[] args) {
// 使用nacos client远程获取nacos服务上的配置信息
// nacos server地址
String serverAddr = "127.0.0.1:8848";
// data id
String dataId = "nacos-simple-demo.yaml";
// group
String group = "DEFAULT_GROUP";
// Properties指定服务的地址,key Value的形式,记住,key的形式不能写错
Properties properties = new Properties();
// 此时ConfigService对象就知道能从哪里获取配置
properties.put("serverAddr",serverAddr);
// 获取配置
// createConfigService()创建配置服务的对象,我们选择传入一个Properties对象
ConfigService configService = null;
try {
configService = NacosFactory.createConfigService(properties);
// 这一步其实就是获取配置 参数:String dataId,String group,long timeoutMs超时时间
// 获取配置的时候我们指定dataId与group之后,ConfigService就能获取到信息的配置内容
String contont = configService.getConfig(dataId, group,5000);
System.out.println(contont);
} catch (NacosException e) {
throw new RuntimeException(e);
}
}
}
如果运行了上面程序出现了上图所示错误,可以再加一个self4j的maven坐标
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.3</version>
</dependency>
成功运行之后就是下面的结果:
二、Nacos配置管理基础应用
2.1 Nacos配置管理模型
对于Nacos配置管理,通过Namespace、group、DataId能够定位到一个配置集。
下面的service指的是服务发现,我们以后再学
2.1.2 配置集(Data Id)
在系统中,一个配置文件通常就是一个配置集,一个配置集可以包含了系统的各种配置信息,例如一个配置集可能包含了数据源、线程池、日志级别等配置项。
每个配置集都可以定义一个有意义的名称,就是配置集的ID即Data Id
就比如说我们之前发布的配置中的Data Id是nacos-simple-demo.yaml,即nacos-simple-demo.yaml是配置集
每个配置文件对应一个DataId
2.1.3 配置项
common:
config: something
2.1.4 配置分组 (Group)
配置分组是对配置集进行分组(可以把几个配置文件归类成一组),通过一个有意义的字符串(如Buy或Trade)来表示,不同的配置分组下可以有相同的配置集(DataID)。
当您在Nacos上创建一个配置 时,如果未填写配置分组的名称,则配置分组的名称默认采用DEFAULT_GROUP。
配置分组的常见场景:可用于区分不同的项目或应用(一般一个项目或应用一个组),例如:学生管理系统的配置集可以定义一个group为:STUDENT_GROUP。
2.1.5 命名空间(Namespace)
命名空间(namespace)可用于进行不同环境的配置隔离(我们完全可以定义两套命名空间,而且这两套命名空间是相互隔离的)。
例如可以隔离开发环境、测试环境和生产环境,因为它们的配置可能各不相同,或者是隔离不同的用户,不同的开发人员使用同一个nacos管理各自的配置,可通过namespace隔离。
不同的命名空间下,可以存在相同名称的配置分组(Group)或配置集。
2.1.6 最佳实践(总结)
Namespace :代表不同 环境 ,如开发、测试、生产环境(每一个环境我们都可以创建一个Namespace)。Group :代表某 项目 ,如 XX 医疗项目、 XX 电商项目DataId :每个项目下往往有若干个 工程 ,每个配置集 (DataId) 是一个工程的 主配置文件
2.2 命名空间管理
2.2.1 namespace隔离设计
-
从一个租户 ( 用户 ) 的角度来看,如果有多套不同的环境,那么这个时候可以根据指定的环境来创建不同的 namespce,以此来实现多环境的隔离。例如,你可能有开发,测试和生产三个不同的环境,那么使用一套nacos集群可以分别建以下三个不同的 namespace 。
-
从多个租户 (用户)的角度来看,每个租户(用户)可能会有自己的namespace(每个用户的配置信息互不影响), 每个租户 ( 用户 ) 的配置数据以及注册的服务数据都会归属到自己的namespace 下,以此来实现多租户间的数据隔离。例如超级管理员分配了三个租户,分别为张三、李四和王五。分配好了之后,各租户用自己的账户名和密码登录后,创建自己的命名空间。如下图所示:
2.2.2 命名空间管理
下面这个public就是命名空间
如下图所示,我们成功的创建了命名空间"prod" ,然后每个命名空间都会有一个id
我们写代码的时候,要指定命名空间就要指定命名空间id,命名空间id可以在下图中复制
String namespace ="2f820239-915b-417c-9002-ead05543ea3d";
然后我们再回到配置列表我们会发现多了一个命名空间"prod"
此时prod命名空间并没有配置(我们也可以在下面这个位置获取到命名空间ID)
namespace 为 public 是 nacos 的一个保留空间,如果您需要创建自己 namespace ,不要和 public重名,以一个实际业务场景有具体语义的名字来命名,以免带来字面上不容易区分自己是哪一个 namespace。在编写程序获取配置集时,指定的 namespace 参数一定要填写 命名空间 ID ,而不是名称如果我们编写代码的时候并没有指定namespace,那默认就是public
2.3 测试命名空间
2.3.1 发布新配置集
发布成功后是下面这个样子
2.3.2 获取新配置项
public class SimpleDemoMain {
public static void main(String[] args) {
// 使用nacos client远程获取nacos服务上的配置信息
// nacos server地址
String serverAddr = "127.0.0.1:8848";
// 命名空间 默认public
String namespace = "2f820239-915b-417c-9002-ead05543ea3d";
// data id
String dataId = "nacos-simple-demo.yaml";
// group
String group = "DEFAULT_GROUP";
// Properties指定服务的地址,key Value的形式,记住,key的形式不能写错
Properties properties = new Properties();
// 此时ConfigService对象就知道能从哪里获取配置
properties.put("serverAddr",serverAddr);
properties.put("namespace",namespace);
// 获取配置
// createConfigService()创建配置服务的对象,我们选择传入一个Properties对象
ConfigService configService = null;
try {
configService = NacosFactory.createConfigService(properties);
// 这一步其实就是获取配置 参数:String dataId,String group,long timeoutMs超时时间
// 获取配置的时候我们指定dataId与group之后,ConfigService就能获取到信息的配置内容
String contont = configService.getConfig(dataId, group,5000);
System.out.println(contont);
} catch (NacosException e) {
throw new RuntimeException(e);
}
}
}
2.4 监听查询功能操作
2.4.1 监听查询功能介绍
客户端去查询服务端的配置信息,当信息有变化的时候,服务端会通知客户端的
但是如果我们的客户端(代码)一直在运行不停止,相当于我们在监听着服务端的内容变化,那么当服务端的配置文件发生改变,那服务端就可以主动通知客户端来获取配置文件的内容
2.4.2 代码功能展示
public class SimpleDemoMain {
public static void main(String[] args) {
// 使用nacos client远程获取nacos服务上的配置信息
// nacos server地址
String serverAddr = "127.0.0.1:8848";
// 命名空间 默认public
String namespace = "2f820239-915b-417c-9002-ead05543ea3d";
// data id
String dataId = "nacos-simple-demo.yaml";
// group
String group = "DEFAULT_GROUP";
// Properties指定服务的地址,key Value的形式,记住,key的形式不能写错
Properties properties = new Properties();
// 此时ConfigService对象就知道能从哪里获取配置
properties.put("serverAddr",serverAddr);
properties.put("namespace",namespace);
// 获取配置
// createConfigService()创建配置服务的对象,我们选择传入一个Properties对象
ConfigService configService = null;
try {
configService = NacosFactory.createConfigService(properties);
// 这一步其实就是获取配置 参数:String dataId,String group,long timeoutMs超时时间
// 获取配置的时候我们指定dataId与group之后,ConfigService就能获取到信息的配置内容
String contont = configService.getConfig(dataId, group,5000);
System.out.println(contont);
// 添加监听器 参数:String dataId,String group,Listener listener
configService.addListener(dataId, group, new Listener() {
public Executor getExecutor() {
return null;
}
// 当配置有变化的时候获取通知
public void receiveConfigInfo(String s) {
// 配置变化的具体内容
System.out.println(s);
}
});
} catch (NacosException e) {
throw new RuntimeException(e);
}
// 让这个程序不结束
while(true){
try{
Thread.sleep(2000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}
我们首先启动的时候,控制台的效果是下面这个样子的
我们打开可视化界面,在“监听查询模块”我们发现了下面的信息
改变下面的内容
当我们将内容发布出去后,idea控制台就会出现了下面的变化
2.5 登录管理
Nacos版本支持简单的登录功能
默认用户名nacos,默认密码nacos
2.5.1 修改默认用户名/密码
Nacos使用的是BCryptPasswordEncoder加密的方式,把明文的格式转化成BCrypt加密形式
如下图所示,下面就是默认的用户名和密码,password便是BCrypt加密形式
2.5.2 BCrypt的maven坐标
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring‐security‐core</artifactId>
<version>5.1.4.RELEASE</version>
</dependency>
2.5.3 代码实现修改密码
编写PasswordEncoderUtil类,生成加密后的密码,采用BCrypt加密方法在每次生成密码时会加随机盐,所以生成密码每次可能不一样。
盐(Salt),在密码学中,是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为“加盐”。
随机盐(salt)增加密码存储安全
public class PasswordEncoderUtil {
public static void main(String[] args) {
System.out.println(new BCryptPasswordEncoder().encode("123")); }
}
当我们获取到加密之后的密码,我们可以使用Java代码修改密码,也可以在navicat中直接修改密码
2.5.4 新增用户名和密码
INSERT INTO users (username, password, enabled) VALUES ('nacos1','$2a$10$SmtL5C6Gp2sLjBrhrx1vj.dJAbJLa4FiJYZsBb921/wfvKAmxKWyu', TRUE);
INSERT INTO roles (username, role) VALUES ('nacos1', 'ROLE_ADMIN');