记一次使用spring-cloud-alibaba的nacos问题

问题背景:

自己想研究一下spring-cloud-alibaba的使用方法,按照官方文档:spring-cloud-alibaba/spring-cloud-alibaba-examples

进行运行前配置的时候,卡在了启动应用。

一直在报错:http error, code=403,msg=user not found!

经过一下午的排查,终于找到问题原因。在这里记录一下提供个解决思路。

排查思路

1.客户端与服务端版本不匹配?

客户端版本是nacos-client的版本是2.2.1;服务端用的2.3.0。 本来以为是nacos-server版本与客户端不匹配造成的,故把服务端换成2.2.3的版本。

再次测试后还是同样的错误。

2.本地客户端与官方示例版本不匹配?

经过长时间的鏖战后,想到了把官方示例下载下来在本地运行,结果一点毛病都没有。

可以看到,配置成功获取到。这时我看了一下官方的nacos-client版本,是2.2.3的。

本以为是这个小版本的差异导致的问题,所以把自己的项目也排查一下,确定是官方pom的依赖

再次检查官方example依赖,却是2.2.3的

不知道是我自己的maven源问题还是官方没有同步的问题,我是用的还是aliyun的maven仓库。 这是通过maven仓库下载的,也尝试了RC1和RC2,都是2.2.1

所以我有强制指定了2.2.3的版本。再次尝试,还是失败。

3.依赖冲突

所以我就去自己的项目里,找到异常出现的地方进行断点跟踪。

发现这里是接收了一个Response,按照这个思路,找到对应的Request,在这里发现了猫腻:

这是官方示例的断点数据,发现自己项目在到这一步时,没有这个accessToken的header。 那么问题就快解决了,只要找到这个header在什么位置设置的,就大概率能解决问题了。

然后继续跟踪,找到这里

发现只是一个Getter方法,所以要找到这个loginIdentityContext是在哪里赋值的,通过idea的快捷键很简单找到这里,

这个NacosAuthLoginConstant.ACCESSTOKEN就是accessToken。

继续往下跟踪,发现直接走到了异常捕获块,发现了问题所在

错误是NoClassDefFoundError,有经验的同学已经看出来可能是依赖冲突了,根据stackTrack继续跟踪

发现是执行这行时出现的错误:

*继续进到ObjectNode文件中,发现import项确实有jackson.core.的东西

那么根据异常com.fasterxml.jackson.core.exc.StreamConstraintsException可以确定:

要么是其他版本的jackson.core覆盖了正确版本,要么是其他版本的jackson库使用了这个StreamConstraintsException,但是正确版本的jackson.core中并没有这个类。

看一下依赖文件:

确实有一个内奸在这里。接下来继续找到依赖树分析一下,把冗余的依赖清除掉,再次尝试,成功!

总结

如果对项目的依赖随便使用,那么依赖冲突这个问题会经常出现,是一个隐形的炸弹。这类问题往往不会被及时解决,可能要耗费大量时间才能发现。所以我们在开发工作时,增加新依赖时也要注意下这个问题,最简单的就是查看一下External Libaries中相关的依赖版本,小伙伴有其他好用的工具可以推荐吗。

下课!

相关推荐
Rexi2 分钟前
go如何写单元测试1
后端
Harry技术32 分钟前
Spring Boot 4.0 发布总结:新特性、依赖变更与升级指南
spring boot·后端
武子康42 分钟前
大数据-159 Apache Kylin Cube 实战:Hive 装载与预计算加速(含 Cuboid/实时 OLAP,Kylin 4.x)
大数据·后端·apache kylin
疯狂的程序猴1 小时前
Mac 抓包软件怎么选?从 HTTPS 调试、TCP 数据流分析到多工具协同的完整抓包方案
后端
BingoGo1 小时前
使用 PHP 和 Raylib 也可以开发贪吃蛇游戏
后端·php
爱分享的鱼鱼1 小时前
Spring Boot如何整合Redis
后端
知其然亦知其所以然1 小时前
别再被问住!Redis Cluster 一文彻底讲透(Java 面试必背)
redis·后端·面试
codercwh1 小时前
3 分钟上手 Claude Code!API 中转站让 AI 编程效率翻倍
后端
SimonKing2 小时前
OCR告别付费!分享两款可部署的开源工具
后端
爱叫啥叫啥2 小时前
STM32从零实战:深入理解RCC时钟与按键控制LED的底层原理
后端