Spring Boot RabbitMQ问题:消息显示在Exchange但Queue为空
问题原因及解决方案
你遇到的核心问题是RabbitMQ配置类中的绑定方法未被Spring容器识别,导致Exchange与Queue之间没有建立绑定关系:
在你的RabbitMQConfig类里,binding()方法缺少@Bean注解,Spring不会将这个绑定实例注册到容器中,也就不会在RabbitMQ服务端创建Exchange和Queue的绑定关系。消息发送到Exchange后,找不到匹配的Queue,最终会被RabbitMQ丢弃,所以你能在Exchange图表看到消息流转,但Queue始终为空。
修复方法
给binding()方法添加@Bean注解,让Spring管理这个绑定配置:
@Configuration public class RabbitMQConfig { @Value("${rabbitmq.queue.name}") private String queue; @Value("${rabbitmq.exchange.name}") private String exchange; @Value("${rabbitmq.routing.key}") private String routingKey; @Bean public Queue queue(){ return new Queue(queue); } @Bean public TopicExchange exchange(){ return new TopicExchange(exchange); } // 添加@Bean注解,让Spring注册这个绑定关系 @Bean public Binding binding(){ return BindingBuilder .bind(queue()) .to(exchange()) .with(routingKey); } }
额外排查点
- 检查配置文件中
rabbitmq.queue.name、rabbitmq.exchange.name、rabbitmq.routing.key的参数值是否正确,避免拼写错误 - 修改配置后重启应用,确保绑定关系在RabbitMQ服务端生效
内容的提问来源于stack exchange,提问作者Batuğ Can Akpınar
相关产品推荐
相关产品推荐

