Spring Cloud Alibaba集成nacos版本问题

​ 最近看到Nacos官网上最新版本已经到2.x版本了;所以就准备看看最新版本都升级了什么新的内容,就在本地用源码部署了nacos服务,然后本地基于Spring Cloud Alibaba最新版本搭建了一个demo工程用于调试,结果发现由于版本问题踩了不少坑……

Nacos 源码版本

当时就选择了Nacos 2.0.2版本

https://github.com/alibaba/nacos/releases/tag/2.0.2

这里源码包解压后然后导入intellidea

  • 注意点:

intellij idea中要安装Protobuf插件

  • nacos-console模块中application.properties配置文件中修改mysql数据库配置成自己本机mysql库
  • mysql脚本选择nacos-config模块中META-INF目录下nacos-db.sql文件
  • 然后在ide中启动配置中VM options中配置-Dnacos.standalone=true 单机启动

搭建Spring Cloud Alibaba 工程

  • 版本选择

在搭建工程前一定要注意框架和中间件版本对应,否则的话会出现各种坑

官网Spring Cloud Alibaba版本兼容说明

g0d0h1

  • 坑一

忽略了组件nacos的版本对应

wzgLJI

这里官方建议版本是1.4.1,我选择了2.0.2

导致问题

Nacos配置中心控制台修改的参数无法实时生效

虽然搭建dubbo服务能够正常启动,然后可以注册到注册中心;但是在使用nacos做配置中心时候,在nacos控制台修改配置文件服务中变量不能实时刷新,我以为是配置问题,通过自己研读nacos和spring-cloud等文档发现没有问题都正确;此时正准备查看源码分析,突然想到了是不是版本问题?

所以马上就查看了官网上述建议版本,发现是nacos版本问题按照选择Spring Cloud Alibaba,Spring Cloud,Spring boot版本Nacos

版本应该选择1.4.1

所以了解到这些,马上验证

验证

此时我为了验证Nacos2.x版本,所以我调整了Spring Cloud Alibaba,Spring Cloud,Spring boot版本

Spring Cloud Alibaba Version Spring Cloud Version Spring Boot Version
2.2.7.RELEASE Spring Cloud Hoxton.SR12 2.3.12.RELEASE
Spring Cloud Alibaba Version Sentinel Version Nacos Version RocketMQ Version Dubbo Version Seata Version
2.2.7.RELEASE 1.8.1 2.0.3 4.6.1 2.7.13 1.3.0

验证过程:

服务启动发现无法启动:报错

MNyVBt

从报错信息上看应该是nacos-client-2.0.3中没有对应StringUtils工具类导致

那么解决:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 <dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<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>
<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> 1.4.2</version>
</dependency>

先排除原jar包中的nacos-client,然后单独引入1.4.2版本的nacos-client,重启服务,发现又报错:

报错信息如下

1
2
3
4
5
6
The class hierarchy was loaded from the following locations:

org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor: file:/Users/shuangfan/maven/repository/org/apache/dubbo/dubbo/2.7.13/dubbo-2.7.13.jar
com.alibaba.spring.beans.factory.annotation.AbstractAnnotationBeanPostProcessor: file:/Users/shuangfan/maven/repository/com/alibaba/spring/spring-context-support/1.0.10/spring-context-support-1.0.10.jar
org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessorAdapter: file:/Users/shuangfan/maven/repository/org/springframework/spring-beans/5.2.15.RELEASE/spring-beans-5.2.15.RELEASE.jar

以上分析发现应该是jar冲突,在此检查官网的建议版本关系,发现版本都是按照建议选择,没有错

经过分析和查询官网的issue,增加

官方issue问题

1
2
3
4
5
6
<!-- 解决dubbo2.7.13jar包冲突问题-->
<dependency>
<groupId>com.alibaba.spring</groupId>
<artifactId>spring-context-support</artifactId>
<version>1.0.11</version>
</dependency>

在此重启,发现没有报错正常,然后验证配置中心功能也正常,实时刷新也正常

思考

1、现在Spring Cloud Alibaba,Spring Cloud,Spring boot以及各个组件版本都比较多,所以在搭建环境时候一定要严格按照官网上建议版本选择,另外对应组件版本也要按照官方建议来,这样至少把出问题的几率和兼容性减少到最少

2、从上面问题看就是按照官方建议来,还是存在一些缺少jar包,jar包冲突等问题,至少这样问题应该在官方issue都有解决方案,或者我们通过错误日志也可以解决

3、从官方的版本建议对照表中新发现

CjIsnf

Spring Cloud Alibaba 从版本2.7.13下一个版本开始都没有对应Dubbo版本兼容了

Dubbo目前最新版本是3.x,3.x版本是一个全新架构版本应该变化比较大,在兼容性上来说难度比较大

网上有篇文章针对这个问题的观点,我比较认同

https://cloud.tencent.com/developer/article/2120216