1 简介
- 在Spring项目中,可以使用Spring-Rabbit去操作RabbitMQ。尤其是在SpringBoot项目中只需要引入对应的amqp的启动器依赖即可,可以很方便的使用RabbitTemplate发送消息,使用注解接收消息。
- 一般的开发过程中:
生产者工程:
- ①application.yaml文件中配置RabbitMQ的相关信息。
- ②在生产者工程中编写配置类,用于创建交换机和队列,并进行绑定。
- ③注入RabbitTemplate对象,通过RabbitTemplate对象发送消息到交换机。
消费者工程:
- ①application.yaml文件配置RabbitMQ的相关信息。
- ②创建消息处理类,用于接收队列中的消息并进行处理。
2 创建总工程
2.1 创建总工程

2.2 导入依赖
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <packaging>pom</packaging> <modules> <module>rabbitmq-producer</module> <module>rabbitmq-consumer</module> </modules> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.8.RELEASE</version> <relativePath/> </parent> <groupId>com.example</groupId> <artifactId>rabbitmq-demo</artifactId> <version>1.0</version> <name>rabbitmq-demo</name> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build></project>
2.3 创建生产者和消费者工程
3 搭建生产者工程
3.1 创建工程
3.2 导入依赖
3.3 启动类
package com.xudaxian;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;/** * @version 1.0 * @since 2021-02-04 22:11 */@SpringBootApplicationpublic class ProducerApplication { public static void main(String[] args) { SpringApplication.run(ProducerApplication.class, args); }}
3.4 配置RabbitMQ
3.4.1 配置文件
- 创建application.yml文件,内容如下:
server: # 端口 port: 8888spring: # RabbitMQ rabbitmq: host: 192.168.49.100 port: 5672 virtual-host: /xudaxian username: xudaxian password: 123456
3.4.2 绑定交换机和队列
- 创建RabbitMQConfig.java文件,内容如下:
package com.xudaxian.config;import org.springframework.amqp.core.*;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;/** * @version 1.0 * @since 2021-02-05 08:45 */@Configurationpublic class RabbitMQConfig { //交换机名称 public static String EXCHANGE_NAME = "xudaxian_topic_exchange"; //队列名称 public static String QUEUE_NAME = "xudaxian_queue"; //声明交换机 @Bean public Exchange exchange() { return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build(); } //声明队列 @Bean public Queue queue() { return QueueBuilder.durable(QUEUE_NAME).build(); } //绑定交换机和队列 @Bean public Binding binding(@Autowired Queue queue, @Autowired Exchange exchange) { return BindingBuilder.bind(queue).to(exchange).with("item.#").noargs(); } /** * 如果不配置RabbitAdmin,默认情况下,SpringBoot启动的时候是不会自动创建交换机和消息队列的,而是等到发送消息的时候 * * @param connectionFactory * @return */ @Bean public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) { RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory); //只有设置为true的时候,SpringBoot启动的时候会加载RabbitAdmin rabbitAdmin.setAutoStartup(true); rabbitAdmin.declareExchange(exchange()); rabbitAdmin.declareQueue(queue()); return rabbitAdmin; }}
3.5 消息发送的Controller
- 创建ProducerController.java文件,内容如下:
package com.xudaxian.web;import com.xudaxian.config.RabbitMQConfig;import org.springframework.amqp.rabbit.core.RabbitTemplate;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;/** * @version 1.0 * @since 2021-02-04 22:27 */@RestControllerpublic class ProducerController { @Autowired private RabbitTemplate rabbitTemplate; /** * @param msg 发送的消息 * @param routingKey 路由key * @return */ @GetMapping(value = "/sendMessage") public String sendMessage(@RequestParam(value = "msg") String msg, @RequestParam(value = "routingKey") String routingKey) { rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME, routingKey, msg); return "发送消息成功"; }}
3.6 测试
4 搭建消费者工程
4.1 创建工程
4.2 导入依赖
4.3 启动类
package com.xudaxian;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;/** * @version 1.0 * @since 2021-02-04 22:40 */@SpringBootApplicationpublic class ConsumerApplication { public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); }}
4.4 配置RabbitMQ
- 创建application.yml文件,内容如下:
server: # 端口 port: 8889spring: # RabbitMQ rabbitmq: host: 192.168.49.100 port: 5672 virtual-host: /xudaxian username: xudaxian password: 123456
- 创建RabbitMQConfig.java文件,内容如下:
package com.xudaxian.config;import org.springframework.amqp.core.Queue;import org.springframework.amqp.core.QueueBuilder;import org.springframework.amqp.rabbit.connection.ConnectionFactory;import org.springframework.amqp.rabbit.core.RabbitAdmin;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/** * @version 1.0 * @since 2021-02-06 10:55 */@Configurationpublic class RabbitMQConfig { public static String QUEUE_NAME = "xudaxian_queue"; @Bean public Queue queue() { return QueueBuilder.durable(QUEUE_NAME).build(); } /** * 如果不配置RabbitAdmin,默认情况下,SpringBoot启动的时候是不会自动创建交换机和消息队列的,而是等到发送消息的时候 * * @param connectionFactory * @return */ @Bean public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) { RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory); //只有设置为true的时候,SpringBoot启动的时候会加载RabbitAdmin rabbitAdmin.setAutoStartup(true); rabbitAdmin.declareQueue(queue()); return rabbitAdmin; }}
4.5 消息监听处理类
- 创建RabbitMQListener.java文件,内容如下:
package com.xudaxian.listener;import org.springframework.amqp.rabbit.annotation.RabbitListener;import org.springframework.stereotype.Component;/** * @version 1.0 * @since 2021-02-04 23:06 */@Componentpublic class RabbitMQListener { @RabbitListener(queues = "xudaxian_queue") public void listener(String message) { System.out.println("消费者接受到的消息:" + message); }}