SpringBoot 整合RabbitMQ
- 生产者步骤
-
创建生产者工程(
可以直接创建springboot的项目,这里并没有直接创建
) -
引入依赖
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.yang</groupId> <artifactId>producer-springboot</artifactId> <version>1.0-SNAPSHOT</version> <!-- 1. 父工程 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> </parent> <dependencies> <!-- 2.springboot整合rabbitmq的依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <!-- 3.单元测试的依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> </dependencies> </project>
-
在resources包下创建
application.yml
配置文件# 配置RabbitMQ的基本信息 spring: rabbitmq: host: 192.168.20.146 port: 5672 username: test password: test virtual-host: /test
-
创建启动类
package com.yang; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class ProducerApplication { public static void main(String[] args) { SpringApplication.run(ProducerApplication.class); } }
-
创建配置类(
topic为例
)@Configuration public class RabbitMQConfig { private static final String EXCHANGE_NAME = "boot_topic_exchange"; private static final String QUEUE_EXCHANGE_NAME = "boot_queue"; //1. 交换机 @Bean("bootExchange") public Exchange bootExchange() { return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build(); } //2. queue队列 @Bean("bootQueue") public Queue bootQueue() { return QueueBuilder.durable(QUEUE_EXCHANGE_NAME).build(); } //3. 队列和交换机的绑定关系 Binding /* 1. 知道那个队列 2. 知道那个交换机 3. 设置Routing Key */ @Bean public Binding bindQueueExchange(@Qualifier("bootQueue") Queue queue,@Qualifier("bootExchange") Exchange exchange){ return BindingBuilder.bind(queue).to(exchange).with("boot.#").noargs(); } }
-
编写测试类测试一下
@SpringBootTest @RunWith(SpringRunner.class) public class test { //1. 注入RabbitmqTemplate @Autowired private RabbitTemplate rabbitTemplate; @Test public void testSend() { rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME,"boot.haha","boot mq hello..."); } }
-
执行结果
-
- 消费者
-
创建生产者工程(
这里直接通过springboot直接创建
)
-
引入依赖(已经不需要了,自动创建帮我们引入了)
-
在resources包下创建
application.yml
配置文件(不需要创建了,但是需要把propertiest改成yml,然后添加配置即可
)# 配置RabbitMQ的基本信息 spring: rabbitmq: host: 192.168.20.146 port: 5672 username: test password: test virtual-host: /test
-
定义监听类,使用@RabbitListener
package com.yang.consumerspringboot.rabbitmq.listener; import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; @Component public class RabbitMQListener { //queues是我们生产者那边刚刚定义的 @RabbitListener(queues = "boot_queue") public void listenerQueue(Message message) { //Message 导入的包不要导错了 System.out.println(new String(message.getBody())); } }
-
执行结果
-
- 小结
- SpringBoot提供了快速整合RabbitMQ的方式
- 基本信息再yml中配置,队列交互机以及绑定关系在配置类中使用Bean的方式配置
- 生产端直接注入RabbitTemplate完成消息发送
- 消费端直接使用@RabbitListener完成消息接收