赞
踩
SpringBoot是一个Java后端的快速开发框架,其内置的大量starter及AutoConfig类帮助我们完成了几乎绝大多数日常开发中需要用到的配置,基本上实现开发者开箱即用。但是这样较好的封装性也导致了一些问题,很多自动配置好的东西,新手使用时并不知其原理,可能也不会去编写自定义配置类代码,导致一些蜜汁bug无法定位,考虑到一些跟我一样的新手朋友代码阅读能力有限,或者受限于开发进度无精力深扒源码,这里将遇到的一些蜜汁bug记录下来,提供一些新的解决思路。
每个版本的源码可能都有区别,所以我碰到的bug别人未必会碰到,这里确定一下bug出现的相关依赖版本号,springboot-2.3.2.RELEASE,amqp-client-5.9.0,spring-rabbit-2.3.10
这是一个常见的报错信息,在完成rabbitmq配置后,springboot项目启动时会报这个错,现有很多解决方案,https://blog.csdn.net/qq_54713898/article/details/127829696,主要考虑是配置ip,port,以及用户密码权限,网络连接等问题,这些都做了尝试,报错仍然存在。然后去翻配置文件,发现自己刚在开发时,为了使用rabbitmq的多个vhost功能,在当前项目的配置文件中,增加了vhost配置,自此rabbitmq无法连接。尝试着注释掉这行,报错消失。配置文件信息如下:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
publisher-confirm-type: CORRELATED
publisher-returns: true
listener:
simple:
prefetch: 1 #预取消息数量
concurrency: 3
acknowledge-mode: manual #手动签收
# virtual-host: /platform
# 蜜汁bug,加了virtual-host登不上
这个算不上bug,应该算特性(笑)
在使用topic模式时,指定监听的key为"user:#“,程序正常运行无报错,但是无法从队列中取出数据,可视化界面中也没有看到发送的消息(据说这是可视化界面的bug,消费者没有成功消费的队列不会在GUI中展示)
检查代码,生产者发送的key为user:1,按照通配符#的解释匹配1个或多个单词应该是能匹配到user:#中,随后仔细翻了一些教程,发现现有教程中routekey不同单词间的分隔都是用的“.”,遂进行尝试,修改为"user:.#”,成功消费。看来这里的通配符不能完全理解为正则中的通配符,还是有固定格式的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。