Spring Cloud-Nacos服务注册&发现

前置文章:
Spring Cloud-Erueka服务注册

零、本文纲要

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

tips:Ctrl + F快速定位所需内容进行阅读吧。

一、安装Nacos

Nacos 快速开始

  • 1、Linux系统安装Nacos

1.1 Java环境准备

①下载JDK:Java Archive Downloads - Java SE 8 (oracle.com),根据自己的Linux系统实际位数下载对应压缩包即可。

下载JDK压缩包.png

②上传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

下载Nacos压缩包.png

②上传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
image.png
  • 3、Nacos控制页面
    Nacos Console: http://192.168.2.105:8848/nacos/index.html
    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相关依赖。

    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
            
                com.alibaba.cloud
                spring-cloud-alibaba-dependencies
                2.2.5.RELEASE
                pom
                import
            
        
    

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

        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
  • 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控制台来查看我们启动的服务,如下:

通过Nacos控制台查看服务.png

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

  • 1、集群模拟

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

user服务集群.png
  • 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
杭州&上海服务集群.png

②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,而后停用重启新服务。

服务权重配置.png
  • 2、命名空间

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

Nacos数据模型.png

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

命名空间设置.png

③服务模块配置指定命名空间
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注册中心会主动询问,如果服务宕机不可用,不会被剔除(会等待直至服务恢复正常,或者手动被删除)。
image.png

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模式。

七、结尾

以上即为服务注册和发现的基础内容,感谢阅读。

你可能感兴趣的:(Spring Cloud-Nacos服务注册&发现)