一、认识和安装Nacos
1.1、认识Nacos(那扣丝)
1.2、Nacos安装(Windows版安装)
1.2.1、下载安装包
1.2.2、解压安装包
1.2.3、端口配置
1.2.4、启动Nacos注册中心
1.2.5、访问
1.3、Nacos安装(Linux版安装)
1.3.1、安装JDK
1.3.2、上传Nacos安装包
1.3.3、解压Nacos安装包
1.3.4、端口配置
1.3.5、启动Nacos注册中心
1.4、Nacos的依赖
二、Nacos快速入门
三、Nacos服务分级存储模型
四、NacosRule负载均衡
五、Nacos服务实例的权重设置
六、Nacos和Eureka的区别
补充:如何成为非临时实例
也就是说Nacos是Eureka的升级版,相比着Eureka功能更加丰富。
GitHub - alibaba/nacos: an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications. - GitHub - alibaba/nacos: an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.https://github.com/alibaba/nacos
目录说明:
bin:启动脚本
conf:配置文件
Nacos的默认端口是8848,如果你电脑上的其它进程占用了8848端口,请先尝试关闭该进程。
如果无法关闭占用8848端口的进程,也可以进入nacos的conf目录,修改配置文件中的端口:
启动非常简单,进入bin目录,打开cmd结构如下:
然后执行命令即可:
windows命令:
startup.cmd -m standalone
执行后的效果如图:
在浏览器输入地址:http://127.0.0.1:8848/nacos即可:(注意:端口号可以不是8848)
默认的账号和密码都是nacos,进入后:
Linux或者Mac安装方式与Windows类似。
Nacos依赖于JDK运行,所以Linux上首先也需要安装JDK才行。
上传jdk安装包到Linux系统中(前面Linux笔记中有安装步骤):
上传到Linux系统中某个目录,例如:/usr/local/ 目录下
然后解压缩:
tar -xvf jdk-8u144-linux-x64.tar.gz
然后重命名为java
配置环境变量:
export JAVA_HOME=/usr/local/java export PATH=$PATH:$JAVA_HOME/bin
设置环境变量:
source /etc/profile
还是和安装windows版的Nacos一样,先去官方找安装包,找到tar.gz的版本即可:
然后将安装包保存到我们盘中之后上传到Linux服务器的某个目录,例如/usr/local/src
目录下:
命令解压缩安装包:
tar -xvf nacos-server-1.4.1.tar.gz
然后删除安装包:
rm -rf nacos-server-1.4.1.tar.gz
目录中最终样式:
目录内部:
与windows版中类似
在nacos/bin目录中,输入命令启动Nacos:
sh startup.sh -m standalone
父工程:
com.alibaba.cloud
spring-cloud-alibaba-dependencies
2.2.5.RELEASE
pom
import
客户端:
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
注意:如果使用Nacos注册中心的话,记得看一下项目中是否配了eureka注册中心,(因为Nacos注册中心和eureka注册中心的意义是一样的,总不能配置两个注册中心吧)
注意:这里我们刚才上面直到Nacos注册中心启动时服务器的端口号为8848,因此在服务消费者和服务提供者的yml配置文件中配置时注意端口号也要写8848相对应。
代码演示如下所示:
1、
com.alibaba.cloud
spring-cloud-alibaba-dependencies
2.2.5.RELEASE
pom
import
如果刷新坐标时出现下面的错误的话,可以多刷新几下maven坐标即可:
2、把服务消费者接口模块项目和服务提供者接口模块项目pom.xml文件中的以前eureka坐标删除掉,添加导入Nacos注册中心的依赖坐标
注:服务消费者和服务提供者两个项目中都要添加此坐标,并且要保证以前的eureka服务注册中心的依赖坐标删除了(因为nacos注册中心和eureka注册中心意义是一样的,但是不能搞两个注册中心吧,所以我们现在用nacos注册中心那么就要把eureka的删除掉)
3
最终导完坐标并且修改好yml配置之后,启动服务消费者和服务提供者服务器,那么服务消费者和服务提供者的服务器访问地址就成功的存放到Nacos注册中心上了:
会发现nacos注册中心确实比下面的eureka注册中心清晰多了:
最终我们把服务消费者和服务提供者的服务器访问地址注册存放到nacos注册中心后,就可以注册发现了:
也就是说我们现在nacos服务注册中心中已经存放了服务提供者的服务器访问地址了,那么我们服务消费者就可以在这个nacos服务注册中心中拉取这些存放的服务提供者的服务器访问地址了,拉取到后我们服务消费者就可以通过负载均衡轮循服务提供者的访问地址(多个)然后调用其服务提供者的开放接口了,最终就能拿到该服务提供者模块(如支付模块)的功能了,(这样也解决了硬编码问题),这就叫做服务发现。
注:要知道服务对应的是谁、实例对应的是谁、集群对应的是谁。
没有Nacos分级储存时的缺点:
代码演示Nacos服务分级储存:
演示如下所示:
也就是说上面我们知道了用户功能模块服务(也就是服务提供者)的几个服务器访问地址已经分别放入到了ZZ机房和SH机房当中了,那么如果现在有一个服务消费者想要调用获取这个用户功能模块服务(服务提供者)的数据资源,那么这个服务消费者到底访问调用这个服务提供者的ZZ机房服务器访问地址呢还是访问SH机房中的服务器访问地址呢:
演示如下所示:
首先我们也先把服务消费者的服务器访问地址也先放到ZZ机房当中去:
那么我们想,服务消费者的服务器访问地址也在ZZ机房当中,服务提供者的ZZ机房中也有两个服务器访问地址,那么如果这个服务消费者调用请求这个服务提供者的数据资源的时候,是不是就直接调用访问的是服务提供者ZZ机房(集群)当中的服务器访问地址呢(毕竟都在一个机房当中):
会发现并不会因为服务消费者和服务提供者的服务器访问地址(实例)都在ZZ机房,服务消费者就只访问服务提供者所在ZZ机房的服务器访问地址(实例),会发现这个服务消费者也访问了这个服务提供者不在ZZ机房的服务器访问地址(实例)【也就是说也访问了服务提供者在SH的实例】,那么就有点不太好了,毕竟服务提供者在SH机房的实例和服务消费者在ZZ机房的实例太远了,那么再访问SH机房的实例的话就太浪费时间了,那么我们能不能就只让服务消费者的实例在ZZ机房时只访问服务提供者的实例也是只在ZZ机房的实例(服务器)呢,这样的话都在同一个机房内进行访问调用那么就不会在耗费时间了:
解决当服务消费者的实例(也就是服务器访问地址)在ZZ机房时,先只让这个服务消费者调用访问服务提供者也在ZZ机房中的实例(也就是服务器访问地址):
做法:只需要在服务消费者的配置文件中加上下面的负载均衡规则配置即可。
配置好之后:服务消费者再进行访问测试:
就会发现就不会再访问调用服务提供者SH机房中的实例了(服务器访问地址了):
会发现因为服务消费者的实例(服务器访问地址)在ZZ机房,配置好属性之后那么当访问调用的服务提供者的时候,就只调用访问服务提供者对应在ZZ机房中的几个实例了:
注意:上面访问服务提供者ZZ机房(集群)的实例(服务器)的时候,是通过随机分配的形式进行访问的,不是轮循。
注: 如果权重调为0的话,那么该服务器就不会再被访问到了(当我们维护系统的时候就可以调为0,也就是说不停机维护)
也就是说我们上面知道,当服务消费者访问服务提供者ZZ集群中的实例(服务器)的时候,是通过随机的方式进行请求访问实例的:
怎么修改权重呢:比如说现在上面两个服务器当中,有一个服务器老化了不能被访问请求很多次,那么我们怎么降低那个服务器被访问的权重呢:
访问测试:
1、Nacos与eureka的共同点分析:
也就是说这些是相同的,注意服务器访问地址可以叫做实例。
2、Nacos与eureka的不同点分析:
首先要先知道什么是临时实例和非临时实例(下面的服务器就是临时的):