• 目录:
  • 一、安装Nacos
  • 二、Nacos服务注册&发现
  • 三、Nacos服务集群&负载均衡
  • 四、Nacos服务权重&命名空间
  • 五、Nacos服务实例
  • 六、对比Nacos和Eureka


一、安装Nacos

  • 1、Linux系统安装Nacos

1.1 Java环境准备

①下载JDK:根据自己的Linux系统实际位数下载对应压缩包即可。

【Spring Cloud-Nacos服务注册&发现】_spring


②上传JDK压缩包至Linux系统,比如:/usr/local/。
③然后解压:tar -xvf jdk-8u202-linux-x64.tar.gz,重命名解压后目录文件夹名为java


# 如需复制命令,请复制此处:
tar -xvf jdk-8u202-linux-x64.tar.gz
mv jdk-8u202-linux-x64 java

④配置环境变量
export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin


# 如需复制命令,请复制此处:
export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin

⑤设置环境变量:


source /etc/profile

1.2 安装Nacos

①下载Nacos
​https://github.com/alibaba/nacos/releases​

【Spring Cloud-Nacos服务注册&发现】_命名空间_02


②上传Nacos压缩包至Linux系统,比如:/usr/local/src/。
③解压&删除压缩包


tar -xvf nacos-server-1.4.1.tar.gz
rm -rf nacos-server-1.4.1.tar.gz

④启动Nacos
进入bin目录,启动Nacos(standalone代表着单机模式运行,非集群模式):


sh startup.sh -m standalone
  • 2、Windows系统安装Nacos

①下载Nacos压缩包
②解压Nacos压缩包
③启动Nacos
进入bin目录,启动Nacos(standalone代表着单机模式运行,非集群模式):


startup.cmd -m standalone

【Spring Cloud-Nacos服务注册&发现】_命名空间_03


  • 3、Nacos控制页面
    ​ Nacos控制页面——默认账户:nacos,默认密码:nacos


二、Nacos服务注册&发现

  • 1、服务模块搭建
    1.1 spring_cloud_orderservice模块:
    ①mapper-[I接口]OrderMapper
    ②pojo-[C类]Order
    ③service-[I接口]OrderService-[C类]OrderServiceImpl
    ④web-[C类]OrderController
    ⑤启动类-[C类]SpringCloudOrderserviceApplication
    1.2 spring_cloud_userservice模块:
    ①mapper-[I接口]UserMapper
    ②pojo-[C类]User
    ③service-[I接口]UserService-[C类]UserServiceImpl
    ④web-[C类]UserController
    ⑤启动类-[C类]SpringCloudUserserviceApplication


  • 2、pom.xml配置相关依赖

顶级父模块配置依赖管理,添加spring-cloud-alibaba-dependencies相关依赖。


<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>2.2.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

各个服务添加nacos相关依赖,spring-cloud-starter-alibaba-nacos-discovery。


<!-- nacos客户端依赖包 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  • 3、application.yml配置nacos服务

配置order服务和user服务的application.yml文件,添加nacos服务的相关配置。其他关于server-port、datasource、application-name、mybatis、logging的配置与之前Eureka的内容一致。


# server-port
server:
port: 8081
# datasource
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: root
url: jdbc:mysql://localhost:3306/cloud_user?useSSL=false
# application name
application:
name: userservice
# nacos server
cloud:
nacos:
server-addr: 127.0.0.1:8848 #nacos server address
# mybatis
mybatis:
type-aliases-package: com.stone.pojo
configuration:
map-underscore-to-camel-case: true
# logging
logging:
level:
com.stone: debug
pattern:
dateformat: yyyy-MM-dd HH:mm:ss:SSS

所以,此处我们只需将eureka-server的内容替换成nacos-server的配置即可。


  • 4、启动服务模块

此时我们就可以通过Nacos控制台来查看我们启动的服务,如下:

【Spring Cloud-Nacos服务注册&发现】_spring_04


三、Nacos服务集群&负载均衡

  • 1、集群模拟

集群模拟与Eureka集群模拟一样,通过IDEA的copy configuration来配置server.port来配置不同端口的服务即可。

【Spring Cloud-Nacos服务注册&发现】_压缩包_05


  • 2、服务分级存储

①user服务配置集群
通过配置服务集群,来给服务进行分级存储。
Ⅰ 模拟上海(ShangHai)地区配置集群:


spring:
cloud:
nacos:
# server address
server-addr: 127.0.0.1:8848
discovery:
# cluster
cluster-name: ShangHai

Ⅱ 模拟杭州(HangZhou)地区配置集群:


spring:
cloud:
nacos:
server-addr: 127.0.0.1:8848
discovery:
cluster-name: HangZhou

【Spring Cloud-Nacos服务注册&发现】_压缩包_06


②order服务配置负载均衡策略
NacosRule负载均衡策略:
Ⅰ 优先选择本地:优先选择配置指定的集群,如果指定集群未有有效可使用的服务,则使用其他集群可用服务。
Ⅱ 本地内随机。


# user-service ribbon rule
userservice:
ribbon:
# 优先选择本地,在本地内随机
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

③order服务配置服务发现集群


spring:
cloud:
nacos:
server-addr: 127.0.0.1:8848
discovery:
cluster-name: HangZhou

此时如果发生了跨集群的调用,日志内会有相应记录:A cross-cluster call occurs。


2022-03-06 16:20:15:571  WARN 36360 --- [nio-8082-exec-6] c.alibaba.cloud.nacos.ribbon.NacosRule   : A cross-cluster call occurs,name = userservice, clusterName = HZ, instance = [Instance{instanceId='192.168.2.105#8084#SH#DEFAULT_GROUP@@userservice', ip='192.168.2.105', port=8084, weight=0.1, healthy=true, enabled=true, ephemeral=true, clusterName='SH', serviceName='DEFAULT_GROUP@@userservice', metadata={preserved.register.source=SPRING_CLOUD}}, Instance{instanceId='192.168.2.105#8081#SH#DEFAULT_GROUP@@userservice', ip='192.168.2.105', port=8081, weight=1.0, healthy=true, enabled=true, ephemeral=true, clusterName='SH', serviceName='DEFAULT_GROUP@@userservice', metadata={preserved.register.source=SPRING_CLOUD}}, Instance{instanceId='192.168.2.105#8083#SH#DEFAULT_GROUP@@userservice', ip='192.168.2.105', port=8083, weight=0.1, healthy=true, enabled=true, ephemeral=true, clusterName='SH', serviceName='DEFAULT_GROUP@@userservice', metadata={preserved.register.source=SPRING_CLOUD}}]


四、Nacos服务权重&命名空间

  • 1、服务权重

服务权重一般配置在0-1之间,0表示无权重,则默认不会调用该服务;
使用场景:服务升级,将集群中某部分服务权重先调整为0,而后停用重启新服务。

【Spring Cloud-Nacos服务注册&发现】_命名空间_07


  • 2、命名空间

①数据模型
可以先看下Nacos数据模型,如下:

【Spring Cloud-Nacos服务注册&发现】_spring_08


Nacos 数据模型 Key 由三元组唯一确定, Namespace默认是空串,公共命名空间(public),分组默认是 DEFAULT_GROUP。
实际开发中,Namespace可能根据开发、测试、生产做不同划分,服务不可以跨Namespace进行调用。
②命名空间设置
命名空间ID可以不做设置,系统会默认生成UUID。

【Spring Cloud-Nacos服务注册&发现】_压缩包_09


③服务模块配置指定命名空间
namespace的配置使用命名空间ID即可,不能填写自己的命名空间名(如:dev)。


spring:
cloud:
nacos:
server-addr: 127.0.0.1:8848
discovery:
cluster-name: HZ
namespace: 15740536-b11b-4e42-9f85-31686f5fb8c6

五、Nacos服务实例

Nacos一般我们仅需配置临时实例即可,以下做下了解。

  • 1、临时实例
    通过心跳监测,如果服务宕机不可用,则会被Nacos注册中心从服务列表中剔除;
  • 2、非临时实例
    Nacos注册中心会主动询问,如果服务宕机不可用,不会被剔除(会等待直至服务恢复正常,或者手动被删除)。

【Spring Cloud-Nacos服务注册&发现】_压缩包_10


application.yml中配置ephemeral属性,来控制临时/非临时实例,如下:


spring:
cloud:
nacos:
server-addr: 127.0.0.1:8848
discovery:
cluster-name: HZ
namespace: 15740536-b11b-4e42-9f85-31686f5fb8c6
ephemeral: false #默认为true,即为临时实例

六、对比Nacos和Eureka

  • 1、共同点
    ①都支持 服务注册 & 服务拉取
    ②都支持 服务提供者 心跳方式健康检测
  • 2、不同点
    ①Nacos支持服务端主动检测提供者状态:临时实例-心跳方式、非临时实例-主动检测;
    ②Nacos临时实例-异常剔除、非临时实例-不主动剔除;
    ③Nacos支持服务列表变更推送,服务列表及时更新;
    ④Nacos集群默认采用AP模式,存在非临时实例采用CP模式、
    Eureka采用AP模式。

七、结尾

以上即为服务注册和发现的基础内容