1 什么是Nacos
Nacos是阿里巴巴开源的一款面向云原生应用的动态服务发现、配置管理和服务管理平台。它支持多种服务发现方式(如DNS、RPC和 HTTP)、多种数据模型(如Config和Service)和多种部署模式(如Standalone、Cluster和console cluster),非常适用于微服务架构的应用场景。
Nacos官方文档地址如下:https://nacos.io/zh-cn/docs/what-is-nacos.html。
Nacos提供了可视化的管理界面和REST API 接口,方便用户使用和管理。
Nacos 的主要功能包括:
1、服务发现和注册:Nacos 支持多种服务注册与发现方式,包括基于 DNS、RPC 或 HTTP 的方式,支持权重、健康状态和元数据的管理。
2、配置中心:Nacos 提供了统一的配置中心,用户可以通过 REST API 或客户端 SDK 对配置进行读写,Nacos 还支持动态配置,即在不重启应用的情况下修改配置。
由于Nacos的其他功能不在本课程的范围中,这里没有展开介绍,感兴趣的同学可自行了解。
2 Nacos的版本
Nacos 的发展历程主要经历了两个版本,1.x 和 2.x。目前,官方在同时维护这两个版本。
Nacos1.x 和 2.x在功能上存在一定的差异,Nacos 1.x的主要功能包括服务注册/发现、配置中心、DNS 解析、权重调整等功能;而 Nacos 2.x在1.x版本的基础上增加了元数据管理、容错、限流降级、服务熔断、服务网格等功能,可以更好地支持云原生应用的开发和管理。
虽然Nacos 2.x 引入了一些新的功能和技术架构,但是对于一些中小型的应用系统来说,Nacos 1.x 的功能已经足够满足业务需求了。此外,许多现有的应用系统已经在使用Nacos 1.x,升级到 2.x 版本需要做一些迁移和改造,不太方便。因此,Nacos 1.x依然是一个可用的、被广泛使用的版本。
3 Nacos安装和启动示例
首先,下载Nacos,本课程中使用的Nacos 1.4.5版本,下载地址为:https://github.com/alibaba/nacos/releases/download/1.4.5/nacos-server-1.4.5.zip。
然后,将下载好的内容解压缩到D:/software目录下。
在nacos/bin目录中提供了Nacos服务器程序的启动命令和终止命令。以.cmd结尾的是windows操作系统使用的命令,以.sh结尾的是Linux操作系统使用的命令。
注意,不能通过直接双击startup.cmd来启动Nacos服务器,而是需要在命令行中通过命令+参数的方式来启动。
可以在nacos/bin目录下通过shift+鼠标右键打开右键菜单栏,在其中选择“在此处打开Powershell窗口”,打开一个Powershell窗口。
在Powershell窗口中使用如下命令启动Nacos。
.\startup.cmd -m standalone
其中:
- -m:表示要设置启动参数
- standalone:表示使用单机模式启动
如果启动时报错为:Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better!,表示本机没有配置JAVA_HOME的环境变量,需要先配置环境变量,然后重启Powershell窗口,再重试该命令。
如果显示如下界面,则表示Nacos正常启动,此时注意不要关闭该Powershell窗口,关闭会导致Nacos关闭。
使用浏览器访问http://localhost:8848/nacos,即可访问Nacos内嵌的服务网站,在网站中查看并使用Nacos。该网站的默认用户名和密码均为nacos。
4 服务注册示例
本案例实现积分微服务和用户微服务的服务注册。
本案例实现步骤如下:
1、实现PointService的注册。
2、测试注册两个PointService实例。
3、实现UserService的注册。
1、实现PointService的注册
首先,在PointService的pom.xml中增加Spring Cloud Alibaba和Nacos相关的依赖。
具体的,首先在properties标签中增加spring cloud和spring cloud alibaba的版本。需要特别注意,各框架之间存在严格的版本对应关系,需要严格按照教材中的版本来配置。
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.3.12.RELEASE</spring-boot.version>
<spring-cloud.version>Hoxton.SR9</spring-cloud.version>
<spring-cloud-alibaba.version>2.2.6.RELEASE</spring-cloud-alibaba.version>
</properties>
然后,在dependencies标签中增加Spring Cloud Alibaba的依赖。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
接下来,在dependencyManagement标签中增加版本控制信息。
<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>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
接下来,在application.yml中新增nacos的相关配置。
spring:
application:
name: point-service
cloud:
nacos:
discovery:
username: nacos
password: nacos
server-addr: localhost:8848
确认Nacos Server处于运行状态,启动PointService项目。通过浏览器查看Nacos Server页面中的服务管理 -> 服务列表,观察PointService实例是否注册成功。
2、测试注册多个PointService实例
可以使用IDEA的Edit Configurations功能配置启动多个服务实例。
在Override parameters中覆盖项目中的配置。
按照同样的操作,配置PointServiceApplication-8092。
启动两个PointService实例,查看Nacos Server中的注册情况。
3、实现UserService的注册
请参考步骤1,为UserService项目添加Spring Cloud Alibaba和Nacos的依赖和Nacos的配置,实现将UserService服务实例注册到Nacos中。
4、案例总结
本案例实现了积分微服务和用户微服务的注册,并且实现了积分微服务注册多个实例。但是,用户微服务对积分微服务的访问依旧是硬编码的方式,没有应用服务发现机制。我们需要一个能基于服务发现实现微服务调用的组件。