You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot生产者发消息时RabbitMQ无法自动创建队列如何解决?

问题根因

  • 你的msgConfiguration配置类没有添加@Configuration注解,Spring启动时不会扫描加载类中声明的队列、交换机、绑定相关的@Bean实例,RabbitMQ服务端自然不会收到资源创建请求。
  • 项目配置文件application.properties中缺少RabbitMQ服务端的基础连接配置,Spring Boot无法和RabbitMQ建立通信,无法完成队列自动创建。

修复方案

  1. 修改RabbitMQ配置类,添加配置类注解和Rabbit启用注解:
package com.hariri_stocks.MQ;

import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableRabbit
public class msgConfiguration {
    public static final String ROUTING_KEY1 = "routingKey1";
    public static final String STOCKS_EXCHANGE = "stocks_exchange";
    public static final String STOCKS_QUEUE = "stocks_queue";
    
    @Bean
    public Queue queue() {
        return new Queue(STOCKS_QUEUE , false);
    }
    
    @Bean
    public TopicExchange exchange() {
        return new TopicExchange(STOCKS_EXCHANGE );
    }
    
    @Bean
    public Binding binding() {
        return BindingBuilder.bind(queue()).to(exchange()).with(ROUTING_KEY1);
    }
    
    @Bean
    public MessageConverter converter() {
        return new Jackson2JsonMessageConverter();
    }

    @Bean
    public AmqpTemplate template(ConnectionFactory cf) {
        final RabbitTemplate rt = new RabbitTemplate(cf);
        rt.setMessageConverter(converter());
        return rt;
    }
}
  1. 在application.properties中添加RabbitMQ连接配置:
# 原有配置保留,新增以下配置
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
# 开启RabbitMQ资源自动创建
spring.rabbitmq.dynamic=true
  1. 可选优化:如果不需要等待消费者返回结果,将convertSendAndReceive改为convertAndSend,避免接口阻塞等待响应。
template.convertAndSend(msgConfiguration.STOCKS_EXCHANGE, msgConfiguration.ROUTING_KEY1,m);

内容的提问来源于stack exchange,提问作者muhammad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 06:06:08