Docker部署RabbitMQ无法接收消息且UI显示队列为空求助
RabbitMQ消息发布后队列为空排查方案
- vhost匹配检查:你自定义了名为
myvhost的虚拟主机,默认RabbitMQ客户端连接时使用/作为默认vhost,需要确认发布者、消费者代码中连接RabbitMQ时明确指定了vhost参数为myvhost;同时在管理UI操作时,要先切换到myvhost命名空间下再执行队列消息发布、查询操作,默认进入的/vhost下的队列和你创建的队列不属于同一个空间。 - 路由规则匹配检查:预先声明的direct类型exchange
xxx和队列xxx的绑定routing key为xxx,需要确认发布者发送消息时,指定的exchange名称为xxx、routing key完全等于xxx,注意大小写、前后空格都要完全匹配。 - 发布参数检查:RabbitMQ默认发布消息不带
mandatory参数时,如果消息无法路由到队列会直接丢弃,不会给发布端返回任何错误。建议发布时开启mandatory参数并配置不可路由消息的回调逻辑,可以快速定位是否是路由失败导致的消息丢失。 - 持久化数据冲突检查:配置挂载了本地
./rabbitmq目录作为RabbitMQ数据持久化目录,如果该目录下有之前运行产生的旧数据,初始化脚本中创建用户、vhost、队列、exchange的操作会因为资源已存在被跳过(脚本中add_user操作加了2>/dev/null吞掉了报错),可能存在旧资源的绑定规则和预期不一致的问题。可以先停止容器,删除本地./rabbitmq目录后再重新启动容器,确认所有资源按预期初始化。 - 队列溢出规则验证:队列配置了
x-overflow: reject-publish和5GB的最大容量限制,如果发布的单条消息体积过大,或者队列已达到容量上限,消息会被直接拒绝。可以先在管理UI查看队列的当前容量状态,或者临时去掉队列的溢出限制测试是否能正常接收消息。
内容的提问来源于stack exchange,提问作者ProgramSpree
相关产品推荐
相关产品推荐

