当前位置 博文首页 > 大魔王先生:Nacos使用和注册部分源码介绍

    大魔王先生:Nacos使用和注册部分源码介绍

    作者:大魔王先生 时间:2021-01-19 16:05

    Nacos简单介绍

    Nacos致力于帮助您发现、配置和管理微服务。Nacos提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
    接下来主要介绍Nacos作为注册中心的使用和注册部分的源码解析。

    Nacos安装

    Nacos预装环境

    Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置 Maven环境这里就不介绍Maven和Java安装,大家自行安装一下。

    安装的方式主要有两种:
    1. 从GitHub上下载源码安装:
    //下载源码的地址
    git clone https://github.com/alibaba/nacos.git
    cd nacos/
    //编译源码
    mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U  
    ls -al distribution/target/
    //进入编译包
    cd distribution/target/nacos-server-$version/nacos/bin

    2.下载安装包的形式:

    tar -xvf nacos-server-$version.tar.gz
    cd nacos/bin
    启动服务器

    启动命令(standalone代表着单机模式运行,非集群模式):

    sh startup.sh -m standalone
    关闭服务器
    sh shutdown.sh
    单机环境下使用Mysql:

    在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力,具体的操作步骤:

    1. 安装数据库,版本要求:5.6.5+
    2. 初始化mysql数据库,数据库初始化文件:nacos-mysql.sql
    3. 修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。
    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
    db.user=root
    db.password=123456

    对于单机来说我们就是玩个demo是够的,但是对于生产来说我们就要考虑高可用的方案了:
    对于集群部署的方式如果在虚拟机环境就采用Nagix负载3台虚拟机,对于K8S的环境通过Service负载3台Pod的形式搭建高可用环境,对于数据库选择来说最好采用主从结构,保证数据库的高可用。
    整体的部署可能如下;


    下图就是搭建好以后的整体界面:

    Nacos使用

    1.创建一个Spring Boot空应用

    2.编辑pom.xml文件

        <properties>
            <springboot.vetsion>2.2.11.RELEASE</springboot.vetsion>
            <spring-cloud-version>Hoxton.SR9</spring-cloud-version>
            <spring-cloud-alibaba-version>2.2.3.RELEASE</spring-cloud-alibaba-version>
        </properties>
    <dependencyManagement>
        <dependencies>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-dependencies</artifactId>
                    <version>${springboot.vetsion}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud-version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                <dependency>
                    <groupId>com.alibaba.cloud</groupId>
                    <artifactId>spring-cloud-alibaba-dependencies</artifactId