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 工程
- 版本选择
在搭建工程前一定要注意框架和中间件版本对应,否则的话会出现各种坑

- 坑一
忽略了组件nacos的版本对应

这里官方建议版本是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 |
验证过程:
服务启动发现无法启动:报错

从报错信息上看应该是nacos-client-2.0.3中没有对应StringUtils工具类导致
那么解决:
<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,重启服务,发现又报错:
报错信息如下
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,增加
<!-- 解决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、从官方的版本建议对照表中新发现

Spring Cloud Alibaba 从版本2.7.13下一个版本开始都没有对应Dubbo版本兼容了
Dubbo目前最新版本是3.x,3.x版本是一个全新架构版本应该变化比较大,在兼容性上来说难度比较大
网上有篇文章针对这个问题的观点,我比较认同
https://cloud.tencent.com/developer/article/2120216