Nacos入门
文章目录
1. Nacos介绍
1.1 Nacos是什么?
分布式服务中间件
其核心功能:
- 服务注册与发现
- 服务配置
目前我只对这两个功能感兴趣,做记录分享。
1.2 安装
官网下载下载地址
解压缩到指定文件夹:
tar -zxvf nacos-server-2.0.3.tar.gz -C /home/xzq/software/
1.3 更换外围数据库
创建一个nacos库
create database nacos_config
将nacos-server解压缩后
执行sql文件建表语句
执行nacos-mysql.sql 文件
修改nacos mysql配置
nacos也是个springboot项目,配置也是在application.properties中
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=xxx
db.password=xxx
加入配置即可
1.4 启动服务
sh startup.sh -m standalone
这是单机启动模式。
然后查看start.out日志文件
可以看到启动成功
访问 http://127.0.0.1:8848/nacos/index.html
默认账户密码 nacos/nacos
1.5 namespace and dataId and Group
这三个分别对应什么呢?
namespace命名空间
group 配置分组
dataId 配置集ID
这三个的概念不用强记,其实就是nacos针对分布式服务更加结构化的配置
在日常开发中 namespace常用作不同的开发环境比如dev,test,prod
Group 常用来区分不同的项目(应用)
data ID 数据集ID既应用或者项目中可以有多个的配置集列表
这三个概念组成到一起形成了Nacos的数据模型
二 Java使用
1.1 nacos-client 使用
添加依赖
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>2.0.3</version>
</dependency>
1.1.1 配置管理
推送数据
public class ConfigTest {
private static final String serverAddr = "127.0.0.1:8848";
private static final String namespace = "85ad050b-5f81-4523-b8f4-3abdf0b02c4c";
private static final String group = "client-Test";
private static final String dataId = "com.xzq.application.properties";
private static final String content = "server.port=10086";
public static void main(String[] args) {
Properties properties = new Properties();
properties.put(PropertyKeyConst.SERVER_ADDR, serverAddr);
properties.put(PropertyKeyConst.NAMESPACE, namespace);
try {
//通过工厂配置服务
ConfigService configService = NacosFactory.createConfigService(properties);
//推送配置
boolean isOk = configService.publishConfig(dataId, group, content);
System.out.println("是否成功:" + isOk);
} catch (NacosException e) {
e.printStackTrace();
}
}
}
可以看到配置已经被推送到 命名空间为dev环境下的client-Test项目分组下的dataId为com.xzq.application.properties 的配置集 ,点开瞅瞅果然是代码中配置的content内容项
拉取配置
public static void main(String[] args) {
Properties properties = new Properties();
properties.put(PropertyKeyConst.SERVER_ADDR, serverAddr);
properties.put(PropertyKeyConst.NAMESPACE, namespace);
try {
//通过工厂配置服务
ConfigService configService = NacosFactory.createConfigService(properties);
// //推送配置
// boolean isOk = configService.publishConfig(dataId, group, content);
// System.out.println("是否成功:" + isOk);
//拉取配置
String content = configService.getConfig(dataId, group, 5000);
System.out.println(content);
} catch (NacosException e) {
e.printStackTrace();
}
}
可以看到成功拉取到我们刚才推送的配置项。
没什么说的,就是基于netty完成的网络调用进行的数据读写。
1.1.2 服务注册及发现
public class DiscoveryTest {
private static final String serverAddr = "127.0.0.1:8848";
private static final String namespace = "85ad050b-5f81-4523-b8f4-3abdf0b02c4c";
private static final String group = "client-Test";
private static final String serverName = "com.xzq.UserController";
private static final String ip = "127.0.0.1";
private static final int port = 8999;
public static void main(String[] args) {
Properties properties = new Properties();
properties.put(PropertyKeyConst.SERVER_ADDR, serverAddr);
properties.put(PropertyKeyConst.NAMESPACE, namespace);
CountDownLatch latch = new CountDownLatch(1);
try {
//通过工厂 获取发现服务
NamingService namingService = NacosFactory.createNamingService(properties);
namingService.registerInstance(serverName, ip, port);
latch.await();
} catch (NacosException | InterruptedException e) {
e.printStackTrace();
}
}
}
public class DiscoveryTest2 {
private static final String serverAddr = "127.0.0.1:8848";
private static final String namespace = "85ad050b-5f81-4523-b8f4-3abdf0b02c4c";
private static final String group = "client-Test";
private static final String serverName = "com.xzq.UserController";
private static final String ip = "127.0.0.2";
private static final int port = 8998;
public static void main(String[] args) {
Properties properties = new Properties();
properties.put(PropertyKeyConst.SERVER_ADDR, serverAddr);
properties.put(PropertyKeyConst.NAMESPACE, namespace);
CountDownLatch latch = new CountDownLatch(1);
try {
//通过工厂 获取发现服务
NamingService namingService = NacosFactory.createNamingService(properties);
namingService.registerInstance(serverName, ip, port);
namingService.registerInstance(serverName, "127.0.0.2", 8998);
latch.await();
} catch (NacosException | InterruptedException e) {
e.printStackTrace();
}
}
}
这里我们启动两个进程分别进行服务注册
可以看到nacos检测到了两个实例
服务发现之获取服务列表
public class DiscoveryTest3 {
private static final String serverAddr = "127.0.0.1:8848";
private static final String namespace = "85ad050b-5f81-4523-b8f4-3abdf0b02c4c";
private static final String group = "client-Test";
private static final String serverName = "com.xzq.UserController";
public static void main(String[] args) {
Properties properties = new Properties();
properties.put(PropertyKeyConst.SERVER_ADDR, serverAddr);
properties.put(PropertyKeyConst.NAMESPACE, namespace);
try {
//通过工厂 获取发现服务
NamingService namingService = NacosFactory.createNamingService(properties);
List<Instance> list = namingService.getAllInstances(serverName);
System.out.println("》》》》》》》》》》》》");
list.forEach(vo->{
System.out.println(vo);
});
System.out.println("》》》》》》》》》》》》");
} catch (NacosException e) {
e.printStackTrace();
}
}
}
可以看到获取到了两个实例的服务列表
1.2 springboot 整合使用
1.3 springCloud 整合使用
1.4 dubbo整合使用
下次补充