前言

后面曾经写不少Nacos相干的文章了,比方《Spring Cloud集成Nacos服务发现源码解析?翻了三套源码,保质保鲜!》,而且目前也打算写一个Spring Cloud的技术解析专栏,一个技术框架一个技术框架的为大家拆解剖析原理和实现。

既然拿Nacos作为一个开始,那么咱们这篇文章就来补充一下Nacos Server的部署以及Nacos Client的调用,直观的理解一下Nacos都蕴含了什么性能。这是应用Nacos的根底,也是后续进行深度分析的根据。强烈建议一起学习一下。

Nacos Server的部署

对于Nacos Server的部署,官网手册中曾经进行了很具体的阐明,对应链接地址(https://nacos.io/zh-cn/docs/d... )。其余形式的部署咱们暂且不说,咱们重点阐明通过源码的模式进行构建和部署,这也是学习的最好形式。

Nacos部署的根本环境要求:JDK 1.8+,Maven 3.2.x+,筹备好即可。

从Github上下载源码:

// 下载源码git clone https://github.com/alibaba/nacos.git// 进入源码目录cd nacos/// 执行编译打包操作mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U// 查看生成的jar包ls -al distribution/target/// 进入到打包好的文件目录,后续可执行启动cd distribution/target/nacos-server-$version/nacos/bin

通过上述命令进入到bin目录下,通常有不同环境的启动脚本:

shutdown.cmd    shutdown.sh    startup.cmd    startup.sh

执行对应环境的脚本即可进行启动,参数standalone代表着单机模式运行:

// Linux/Unix/Macsh startup.sh -m standalone// ubuntubash startup.sh -m standalone// Windowsstartup.cmd -m standalone

上述操作实用于打包和部署,也实用于本地启动服务,但如果是学源码,则能够间接执行console(nacos-console)中的main办法(Nacos类)即可。

执行main办法启动,默认也是集群模式,可通过JVM参数来指定单机启动:

-Dnacos.standalone=true

如果为了不便,也能够间接在启动类的源码中间接增加该参数:

@SpringBootApplication(scanBasePackages = "com.alibaba.nacos")@ServletComponentScan@EnableSchedulingpublic class Nacos {    public static void main(String[] args) {        // 通过环境变量的模式设置单机启动        System.setProperty(Constants.STANDALONE_MODE_PROPERTY_NAME, "true");        SpringApplication.run(Nacos.class, args);    }}

通过上述步骤,咱们曾经能够启动一个Nacos Server了,前面就来看如何应用。

Nacos治理后盾

在启动Nacos Server时,控制台会打印如下日志信息:

         ,--.       ,--.'|   ,--,:  : |                                           Nacos ,`--.'`|  ' :                       ,---.               Running in stand alone mode, All function modules|   :  :  | |                      '   ,'\   .--.--.    Port: 8848:   |   \ | :  ,--.--.     ,---.  /   /   | /  /    '   Pid: 47395|   : '  '; | /       \   /     \.   ; ,. :|  :  /`./   Console: http://192.168.1.190:8848/nacos/index.html'   ' ;.    ;.--.  .-. | /    / ''   | |: :|  :  ;_|   | | \   | \__\/: . ..    ' / '   | .; : \  \    `.      https://nacos.io'   : |  ; .' ," .--.; |'   ; :__|   :    |  `----.   \|   | '`--'  /  /  ,.  |'   | '.'|\   \  /  /  /`--'  /'   : |     ;  :   .'   \   :    : `----'  '--'.     /;   |.'     |  ,     .-./\   \  /            `--'---''---'        `--`---'     `----'

通过下面的日志,能够看出启动的模式为“stand alone mode”,端口为8848,治理后盾为:http://192.168.1.190:8848/nac... 。

这里咱们间接拜访本机服务:http://127.0.0.1:8848/nacos/i... 。

默认状况下,用户和明码都是nacos。登录胜利之后,大家能够轻易点点,其中蕴含配置管理、服务治理、权限治理、命名空间、集群治理几个板块。

能够看到默认的命名空间为public,默认的用户为nacos。

此时执行一条curl命令,进行模仿服务注册:

curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'

执行之后,在此查看治理后盾,会发现服务列表中曾经增加了一条记录。

点击这条记录的详情,能够看到更多信息。

因为咱们下面是通过一个命令注册的服务,这个服务并不存在,Nacos Server会定时查看服务的衰弱状态。你会发现,过了一会儿这个服务就不见了。这便是Nacos Server发现服务“挂掉”了,将其移除了。

其余的相似操作,大家能够尝试着通过curl命令或客户端工具进行尝试,同时配合治理后盾看对应的数据。

服务发现命令:

curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'

公布配置命令:

curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld"

获取配置命令:

curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"

Spring Cloud集成Nacos

最初,咱们再以一个简略的实例来讲Nacos集成到Spring Cloud我的项目当中,看是否可能将服务注册胜利。对于Spring Cloud之间服务的调用,咱们前面文章再专门解说。

首先,新建一个Spring Boot我的项目,引入Spring Cloud和Spring Cloud Alibaba的依赖,残缺的pom.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>2.4.2</version>        <relativePath/> <!-- lookup parent from repository -->    </parent>    <groupId>com.springcloud</groupId>    <artifactId>spring-cloud-alibaba-nacos</artifactId>    <version>0.0.1-SNAPSHOT</version>    <name>spring-cloud-alibaba-nacos</name>    <description>springcloud alibaba nacos集成</description>    <properties>        <java.version>1.8</java.version>        <spring-boot.version>2.4.2</spring-boot.version>        <spring-cloud.version>2020.0.0</spring-cloud.version>        <cloud-alibaba.version>2021.1</cloud-alibaba.version>    </properties>    <dependencyManagement>        <dependencies>            <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>                <version>${cloud-alibaba.version}</version>                <type>pom</type>                <scope>import</scope>            </dependency>        </dependencies>    </dependencyManagement>    <dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-actuator</artifactId>        </dependency>        <dependency>            <groupId>com.alibaba.cloud</groupId>            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>            <exclusions>                <exclusion>                    <groupId>org.junit.vintage</groupId>                    <artifactId>junit-vintage-engine</artifactId>                </exclusion>            </exclusions>        </dependency>    </dependencies>    <build>        <plugins>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>            </plugin>        </plugins>    </build></project>

其中dependencyManagement中定义了Spring Cloud和Spring Cloud Alibaba的依赖的版本信息。这里须要留神的是Spring Cloud和Spring Boot的版本之间是有限度的。这个能够在https://spring.io/projects/sp...

而后,在yml中配置nacos注册核心服务器地址:

spring:  application:    name: nacos-spring-cloud-learn  cloud:    nacos:      discovery:        server-addr: 127.0.0.1:8848

此时,启动服务,查看Nacos Server的控制台,会发现,像后面间接执行curl命令的成果一样,胜利的将服务注册到Nacos中了。

小结

本文通过给大家解说如何部署Nacos服务、如何集成到SpringCloud,为前面更进一步学习SpringCloud做好筹备。其中也波及到一些实践经验和坑。

Nacos系列

  • 《Spring Cloud集成Nacos服务发现源码解析?翻了三套源码,保质保鲜!》
  • 《要学习微服务的服务发现?先来理解一些科普知识吧》
  • 《微服务的灵魂摆渡者——Nacos,来一篇原理全攻略》
  • 《你也对浏览源码感兴趣,说说我是如何浏览Nacos源码的》
  • 《Nacos中曾经有Optional应用案例了,是时候慎重对待这一语法了》
  • 《Nacos源码中为什么应用了String.intern办法?》
  • 《学习Nacos?咱先把服务搞起来,实战教程》