最近项目在进行rabbitMq项目集成时,出现一个其问题,在生产者启动后未生产的时候,消费者启动会报错404找不到队列,网站大部分文档都没有说清楚;补充一个作为记录
第一步:需要在生产者配置中显示声明RabbitAdmin
@Bean
public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory);
rabbitAdmin.setAutoStartup(true);
return rabbitAdmin;
}
第二步:在Queue创建时显示声明
@Bean
public Queue initHighDataQueue() {
Console.log("rabit生产者被声明");
Queue queue = new Queue(MqQueueConst.HIGH_DATA_EXCHANGE, true, false, false);
rabbitAdmin.declareQueue(queue);
return queue;
}
启动后即可在日志中看到如下结果:
2022-02-12 11:09:27.374 INFO --- [ main] o.s.a.r.c.CachingConnectionFactory : Attempting to connect to: [localhost:5672]
2022-02-12 11:09:27.451 INFO --- [ main] o.s.a.r.c.CachingConnectionFactory : Created new connection: rabbitConnectionFactory#5516ee5:0/SimpleConnection@63c66980 [delegate=amqp://cloud@127.0.0.1:5672/cloud, localPort= 38784]
完整代码如下:
import cn.hutool.core.lang.Console;
import com.scentralit.platform.sdk.constans.MqQueueConst;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabitConfig {
@Autowired
private RabbitAdmin rabbitAdmin;
@Bean
public Queue initHighDataQueue() {
Console.log("rabit生产者被声明");
Queue queue = new Queue(MqQueueConst.HIGH_DATA_EXCHANGE, true, false, false);
rabbitAdmin.declareQueue(queue);
return queue;
}
@Bean
public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory);
rabbitAdmin.setAutoStartup(true);
return rabbitAdmin;
}
}