欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > Spring Boot 启动时自动配置 RabbitMQ 交换机、队列和绑定关系

Spring Boot 启动时自动配置 RabbitMQ 交换机、队列和绑定关系

2025/4/22 9:04:17 来源:https://blog.csdn.net/qq_29752857/article/details/143734167  浏览:    关键词:Spring Boot 启动时自动配置 RabbitMQ 交换机、队列和绑定关系

在使用 Spring Boot 开发消息队列应用时,我们经常需要在应用启动时自动创建 RabbitMQ 的交换机、队列和绑定关系。本文将介绍如何通过 Spring Boot 的启动后执行方法来实现这一功能,并提供相应的演示代码和依赖配置。

一、添加依赖

为了在 Spring Boot 项目中使用 RabbitMQ,首先需要添加 RabbitMQ 的依赖。在 pom.xml 文件中添加以下依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

这个依赖引入了 Spring AMQP,简化了与 RabbitMQ 的集成。

二、配置 RabbitMQ

在 Spring Boot 的配置文件 application.propertiesapplication.yml 中,配置 RabbitMQ 的连接信息。以下是 application.yml 的配置示例:

spring:rabbitmq:host: localhostport: 5672username: guestpassword: guest

三、演示代码

以下是使用 @Configuration 注解、 @PostConstruct 注解、CommandLineRunner 接口和 ApplicationListener 接口来在 Spring Boot 启动时创建 RabbitMQ 交换机、队列和绑定关系的代码示例。

使用 @Configuration注解

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.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class RabbitMQConfig {@Beanpublic Queue myQueue() {return new Queue("myQueue", true);}@Beanpublic TopicExchange myExchange() {return new TopicExchange("myExchange");}@Beanpublic Binding binding() {return BindingBuilder.bind(myQueue()).to(myExchange()).with("routingKey");}
}

使用 @PostConstruct 注解

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.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;@Component
public class RabbitMQConfig {@Autowiredprivate ConnectionFactory connectionFactory;@PostConstructpublic void init() {RabbitAdmin admin = new RabbitAdmin(connectionFactory);// 定义交换机admin.declareExchange(new TopicExchange("myExchange"));// 定义队列admin.declareQueue(new Queue("myQueue"));// 定义绑定关系admin.declareBinding(BindingBuilder.bind(new Queue("myQueue")).to(new TopicExchange("myExchange")).with("routingKey"));}
}

实现 CommandLineRunner 接口

import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;@Component
public class RabbitMQInitializer implements CommandLineRunner {@Autowiredprivate ConnectionFactory connectionFactory;@Overridepublic void run(String... args) throws Exception {RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory);// 定义交换机rabbitAdmin.declareExchange(new TopicExchange("myExchange"));// 定义队列rabbitAdmin.declareQueue(new Queue("myQueue"));// 定义绑定关系rabbitAdmin.declareBinding(BindingBuilder.bind(new Queue("myQueue")).to(new TopicExchange("myExchange")).with("routingKey"));}
}

实现 ApplicationListener 接口


import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
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.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;@Component
public class RabbitMQApplicationListener implements ApplicationListener<ContextRefreshedEvent> {@Autowiredprivate ConnectionFactory connectionFactory;@Overridepublic void onApplicationEvent(ContextRefreshedEvent event) {RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory);// 定义交换机rabbitAdmin.declareExchange(new TopicExchange("myExchange"));// 定义队列rabbitAdmin.declareQueue(new Queue("myQueue"));// 定义绑定关系rabbitAdmin.declareBinding(BindingBuilder.bind(new Queue("myQueue")).to(new TopicExchange("myExchange")).with("routingKey"));}
}

以上方法都可以在 Spring Boot 应用启动后自动配置 RabbitMQ 的交换机、队列和绑定关系,你可以根据实际需求选择合适的方法。希望这篇文章能帮助你更好地理解和应用 Spring Boot 与 RabbitMQ 的集成。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词