前言
后面曾经写不少 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/Mac
sh startup.sh -m standalone
// ubuntu
bash startup.sh -m standalone
// Windows
startup.cmd -m standalone
上述操作实用于打包和部署,也实用于本地启动服务,但如果是学源码,则能够间接执行 console(nacos-console) 中的 main 办法(Nacos 类)即可。
执行 main 办法启动,默认也是集群模式,可通过 JVM 参数来指定单机启动:
-Dnacos.standalone=true
如果为了不便,也能够间接在启动类的源码中间接增加该参数:
@SpringBootApplication(scanBasePackages = "com.alibaba.nacos")
@ServletComponentScan
@EnableScheduling
public 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?咱先把服务搞起来,实战教程》