Nacos1.x升级至2.x版本流程及遇到的问题(客户端)

829 阅读2分钟

Nacos服务端由1.x升级到2.x后,仍可以兼容1.x的客户端,但是仍存在连接问题,于是对客户端服务一一升级。

官方版本兼容性介绍文档: Nacos 2.0.0 兼容性文档

一、升级后版本情况

  • Spring Cloud:Greenwich.SR5
  • Spring Cloud Alibaba:2.1.2.RELEASE
  • Spring Boot:2.1.12.RELEASE
  • Nacos Client:2.0.0-BETA

按照版本对应关系升级:

   <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <version>2.1.5.RELEASE</version>
        <exclusions>
            <exclusion>
                <groupId>com.alibaba.nacos</groupId>
                <artifactId>nacos-client</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        <version>2.1.5.RELEASE</version>
        <exclusions>
            <exclusion>
                <groupId>com.alibaba.nacos</groupId>
                <artifactId>nacos-client</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>com.alibaba.nacos</groupId>
        <artifactId>nacos-client</artifactId>
        <version>2.0.0-BETA</version>
    </dependency>

二、端口

Nacos2.0版本相比1.X新增了gRPC的通信方式,因此需要增加2个端口。新增端口是在配置的主端口(server.port)基础上,进行一定偏移量自动生成。

端口与主端口的偏移量描述
98481000客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求
98491001服务端gRPC请求服务端端口,用于服务间同步等

使用VIP/nginx请求时,需要配置成TCP转发,不能配置http2转发,否则连接会被nginx断开。

三、启动服务遇到的问题

启动时报错Connection is unregistered.或Client not connected,current status:STARTING

原因是客户端gRPC无法和服务端创建连接,请先使用telnet ${nacos.server.address}:${nacos.server.grpc.port}进行测试,查看网络是否畅通,服务端端口是否已经正确监听。

若服务端没有问题,查看配置是否有误,服务端和客户端的所配置的端口应一致。

若配置也没有问题,查看是否有防火墙或VIP端口转发问题,Nacos2.0的gRPC端口均通过主端口的偏移量计算产生,因此端口转发也需要满足该偏移量。

以上是官方的解决方案,但是我在检查过都没问题后,启动后还是报连接失败问题,

有些博主给的解决方案是客户端退回1.x版本。这... ...

后来在测试中,发现项目中存在JAR冲突问题,导致nacos-api引用了低版本的protobuf,

后来在项目中引入依赖,解决问题。

<dependency>
    <groupId>com.google.protobuf</groupId>
    <artifactId>protobuf-java</artifactId>
    <version>3.8.0</version>
    <scope>compile</scope>
</dependency>

四、Nacos1.x 与 Nacos2.x 配置文件的区别

spring:
  application:
    name: service-product
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848   # Nacos配置中心的地址
        file-extension: yaml  # 配置的格式
        
        #新版本配置方式 可以配置多个
        shared-configs[0]: 
          data_id: all-service.yaml  # 要引入的配置
          group: DEFAULT_GROUP # 可以不写,默认值为DEFAULT_GROUP
          refresh: true # 默认是false,如果需要支持自动刷新需要配置true,搭配@RefreshScope实现动态刷新
          
        #老版本配置方式
        #shared-dataids: all-service.yaml  # 要引入的配置
        #refreshable-dataids: all-service.yaml # 动态刷新时也刷新引入的配置
  profiles:
    active: test # 环境标识