卡了我六个小时的bug终于解决了,分享一下解决的思路,希望可以给大家在解决bug时提供一些思路
这是关于springboot整合rabbitmq时出现的bug
最初的bug是这个,一直重复出现这个错误
我当时就怀疑是不是连接时出了问题,后来就去修改了端口号5672为15672,但是并没有什么用,还是报这个错误,我就开始排查代码看看是哪出了问题,后来我就去把各个代码都分别注释掉,测试看看是哪块代码出了问题,后来发现是消费者监听那一块的代码的锅
只要把这个代码注释掉或者仅仅把“@RabbitListener(queues = "QD")”这一段代码注释掉就可以正常运行不会报错,不过虽然知道可能是这里出了问题,但是并没有很好的解决方案,看文档没有很看明白,网上也没有对这个很好的解释,走投无路之下,我去找了网上一些rabbitmq整合的教程,复制他们的代码测试。
这回是不重复报这个错误了,但是连接local host:8080时出现了这个问题
这时又是一脸懵,不应该是这个啊,于是我就想是不是端口号8080没有被使用,于是我就打开cmd,看看端口号使用没有
netstat -ano
一看果真没有,我就想不对啊,我明明导入了web场景,怎么会无法连接呢,于是我又创建了一个新的springboot项目测试,发现启动这个项目后8080端口被占用了
这说明不是web场景的问题,我的环境配置应该也没问题,应该是代码中出了问题,导致8080端口没有被用到
这时我发现运行时报了这个错误,一开始没有注意到它
它上面写了冲突的位置,于是我顺着这个找maven仓库,发现这里多了个2.3.6,我就把它删掉,但是在我重新导入依赖时它又出现了
我明明导入的是2.4.17,后来在查看spring-boot-starter-amqp时发现,他这个是会自己导的
这里分享一个查看类冲突的技巧
通过这个图可以很清晰的看出是哪个类冲突了。
后来我就将下面这段代码删掉,反正他会自己导(这段代码我看的教程中的文档是没有的,应该是我之前网上看其他教程时加里面的)
后来将这段代码删除后,之前出现的bug又出现了,就是上面重复出现的那个bug
我就想,这个bug出现的原因会不会是版本问题,于是我提高了springboot的版本至2.7.17(这个是目前idea创建springboot项目选择的最低版本)但是这样项目跑不起来,当时看网课弹幕上说的是因为版本太高,但是这样又会出现之前的问题,于是我又在网上搜索,发现这个是swagger的版本跟springboot版本冲突了,提高swagger的版本就好。
这里说的“bug出现的原因会不会是版本问题”网上还真有解释
最后这样可以运行了,但是还是出现最开始的bug,不过这回我发现了一个之前没有发现的细节
经过查阅发现是端口号问题
最后运行成功,localhost也可以连接的上了
真是一波三折,不过还是学到不少东西,但是最开始出现的问题还是没很想明白,它当时是怎么报的那个错,感觉应该跟版本有一定关系。
