Nacos使用手册

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整合使用

下次补充

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值