卡了我六个小时的bug终于解决了,分享一下解决的思路,希望可以给大家在解决bug时提供一些思路

这是关于springboot整合rabbitmq时出现的bug

最初的bug是这个,一直重复出现这个错误

我当时就怀疑是不是连接时出了问题,后来就去修改了端口号5672为15672,但是并没有什么用,还是报这个错误,我就开始排查代码看看是哪出了问题,后来我就去把各个代码都分别注释掉,测试看看是哪块代码出了问题,后来发现是消费者监听那一块的代码的锅


package com.example.testweb.consumer;

import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.nio.channels.Channel;
import java.util.Date;

/**
* 队列TTL 消费者
*/
@Slf4j
@Component
public class DeadLetterQueueConsumer {
//接收消息
@RabbitListener(queues = "QD")
public void receiveD(Message message, Channel channel) throws Exception {
String msg = new String(message.getBody());
log.info("当前时间:{}, 收到死信队列的消息“{}", new Date().toString(), msg);

}

}

只要把这个代码注释掉或者仅仅把“@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时发现,他这个是会自己导的

这里分享一个查看类冲突的技巧


通过这个图可以很清晰的看出是哪个类冲突了。

后来我就将下面这段代码删掉,反正他会自己导(这段代码我看的教程中的文档是没有的,应该是我之前网上看其他教程时加里面的)

<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>2.4.17</version>
</dependency>

后来将这段代码删除后,之前出现的bug又出现了,就是上面重复出现的那个bug

我就想,这个bug出现的原因会不会是版本问题,于是我提高了springboot的版本至2.7.17(这个是目前idea创建springboot项目选择的最低版本)但是这样项目跑不起来,当时看网课弹幕上说的是因为版本太高,但是这样又会出现之前的问题,于是我又在网上搜索,发现这个是swagger的版本跟springboot版本冲突了,提高swagger的版本就好。

这里说的“bug出现的原因会不会是版本问题”网上还真有解释

最后这样可以运行了,但是还是出现最开始的bug,不过这回我发现了一个之前没有发现的细节

经过查阅发现是端口号问题

最后运行成功,localhost也可以连接的上了

真是一波三折,不过还是学到不少东西,但是最开始出现的问题还是没很想明白,它当时是怎么报的那个错,感觉应该跟版本有一定关系。

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
blink
作者分享
大家觉得今年秋招投中小厂的效果怎么样,我是在boss上沟通了500家,投了40多家,结果就两个面试。
3
学习鱼oj时碰见了一个很奇怪bug Exception in thread "main" java.lang.UnsupportedClassVersionError: Main has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0 翻译:Java .lang. unsupportedclassversionerror: main已被最新版本的Java运行时(类文件版本55.0)编译,此版本的Java运行时仅识别52.0以下的类文件版本 意思应该是说我的编译和运行的环境不匹配 但是我的jdk配置不管在哪都是8
7
刚刚有星球同学问我要了rabbitmq的笔记,于是我想着在星球分享一下,这个是根据尚硅谷的rabbitmq课程笔记改的(md格式),里面加入了一些自己的理解,顺带着还画了一个思维导图(用xmind打开就可以)
18
不知道大家有没有被学校的课恶心过的经历,老师非常较真,对实验报告要求非常高,如果写不好平时分就会很低,期末很难过,而且这个实验报告是要小组协作,量很大,小组成员也都不想写,自己写的话很浪费时间,而且老师还会不定期收作业,并且作业是课堂练习和布置的题,作业一多就不知道要完成哪些了,现在真是被这玩意折磨无语了。
9
关于一个bug,今天在学习Rabbitmq时出现的,网上搜了很长时间都没有解决,希望大佬们指点一下 目前已经试过但是没有用的方法 一. springboot中的配置文件配置的不对,这其中又分为: (1)配置项格式出错,比如yml格式常见的配置项错位 没有错误 (2)rabbitmq地址错误 没有错误 (3)端口错误 没有错误 二. rabbitmq地址有误,或者rabbitmq所在服务器的网络存在问题,无法连接,这点可以通过ping来测试 测试没有问题 三.配置的账号没有开通对应权限 确定权限均已开通 四. virtual-host配置的有误 没有问题 2023-11-17 21:37:01.974 ERROR 25460 --- [ntContainer#0-3] o.s.a.r.l.SimpleMessageListenerContainer : Failed to check/redeclare auto-delete queue(s). org.springframework.amqp.AmqpIOException: java.io.IOException 代码如下
10
下载 APP