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工具类导致
那么解决:
1 | <dependency> |
先排除原jar包中的nacos-client,然后单独引入1.4.2版本的nacos-client,重启服务,发现又报错:
报错信息如下
1 | The class hierarchy was loaded from the following locations: |
以上分析发现应该是jar冲突,在此检查官网的建议版本关系,发现版本都是按照建议选择,没有错
经过分析和查询官网的issue,增加
1 | <!-- 解决dubbo2.7.13jar包冲突问题--> |
在此重启,发现没有报错正常,然后验证配置中心功能也正常,实时刷新也正常
思考
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版本是一个全新架构版本应该变化比较大,在兼容性上来说难度比较大
网上有篇文章针对这个问题的观点,我比较认同