一些收藏

Spring Cloud-Nacos服务注册&发现

2022-03-06  本文已影响0人  石头耳东

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

零、本文纲要

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

一、安装Nacos

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

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

startup.cmd -m standalone
image.png

二、Nacos服务注册&发现

顶级父模块配置依赖管理,添加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>

配置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的配置即可。

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

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

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

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

user服务集群.png

①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服务权重&命名空间

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

服务权重配置.png

①数据模型
可以先看下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一般我们仅需配置临时实例即可,以下做下了解。

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

七、结尾

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

上一篇下一篇

猜你喜欢

热点阅读