一、环境准备
安装 RabbitMQ
在官网上下载对应操作系统的安装包(如 Windows、Linux 等),按照安装向导完成安装。
安装完成后,启动 RabbitMQ 服务。在 Windows 系统下,可以在服务列表中找到 RabbitMQ Server 并启动;在 Linux 系统下,可以通过命令行启动,例如使用
systemctl start rabbitmq-server
(具体命令可能因 Linux 发行版而异)。默认情况下,RabbitMQ 使用 5672 端口进行通信。可以通过浏览器访问
http://localhost:15672
(默认用户名和密码是 guest/guest)来访问 RabbitMQ 的管理界面,查看队列、交换机等信息。
添加 Spring Boot 依赖
在 Spring Boot 项目的
pom.xml
文件中添加 RabbitMQ 相关依赖。例如:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>
这个依赖会自动引入 RabbitMQ 的客户端库以及 Spring AMQP(高级消息队列协议)相关的模块,方便我们在 Spring Boot 中操作 RabbitMQ。
二、配置 RabbitMQ
在 application.properties 或 application.yml 文件中配置
application.properties 示
spring.rabbitmq.host=localhost spring.rabbitmq.port=5672 spring.rabbitmq.username=guest spring.rabbitmq.password=guest
这里配置了 RabbitMQ 服务器的地址、端口以及登录的用户名和密码。如果 RabbitMQ 服务器部署在其他机器上,需要将
localhost
替换为对应的 IP 地址。application.yml 示例
spring: rabbitmq: host: localhost port: 5672 username: guest password: guest
高级配置(可选)
连接池配置 如果应用需要频繁地与 RabbitMQ 交互,可以通过配置连接池来提高性能。例如
spring.rabbitmq.listener.simple.concurrency=3 spring.rabbitmq.listener.simple.max-concurrency=10
这里设置了消费者线程池的最小线程数为 3,最大线程数为 10,可以根据实际业务需求调整这些参数。
消息确认机制配置 为了确保消息可靠地发送到 RabbitMQ 服务器,可以开启消息确认机制
spring.rabbitmq.publisher-confirms=true
当消息成功发送到 RabbitMQ 服务器后,服务器会发送确认消息给生产者。
三、生产者代码实现
创建 RabbitMQ 配置类(可选)
如果需要自定义一些 RabbitMQ 的配置,如交换机、队列等,可以创建一个配置类。例如
import org.springframework.amqp.core.*; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class RabbitMQConfig { // 定义队列 @Bean public Queue myQueue() { return new Queue("myQueue", true); // 第二个参数表示是否持久化 } // 定义交换机 @Bean public DirectExchange myExchange() { return new DirectExchange("myExchange", true, false); } // 绑定队列和交换机 @Bean public Binding myBinding() { return BindingBuilder.bind(myQueue()).to(myExchange()).with("myRoutingKey"); } }
在这个例子中,定义了一个名为
myQueue
的队列、一个名为myExchange
的直连交换机(DirectExchange),并通过路由键myRoutingKey
将队列绑定到交换机。
创建生产者类
使用
RabbitTemplate
来发送消息。例如:import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class RabbitMQProducer { @Autowired private RabbitTemplate rabbitTemplate; public void sendMessage(String message) { rabbitTemplate.convertAndSend("myExchange", "myRoutingKey", message); } }
在这个例子中,通过调用
sendMessage
方法,将消息发送到名为myExchange
的交换机,并指定路由键为myRoutingKey
。RabbitMQ 会根据路由键将消息路由到对应的队列。
四、消费者代码实现
创建消费者类
使用
@RabbitListener
注解来监听队列中的消息。例如:import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; @Component public class RabbitMQConsumer { @RabbitListener(queues = "myQueue") public void receiveMessage(String message) { System.out.println("Received message: " + message); } }
在这个例子中,
RabbitListener
注解指定了要监听的队列名为myQueue
。当有消息到达该队列时,receiveMessage
方法会被调用,并打印接收到的消息。
手动确认消息(可选)
默认情况下,Spring Boot 使用自动确认模式,即消费者接收到消息后,RabbitMQ 会自动认为消息已被成功处理。如果需要手动确认消息,可以在配置类中设置:
spring.rabbitmq.listener.simple.acknowledge-mode=manual
然后在消费者代码中,通过
Channel
手动确认消息:import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.stereotype.Component; import com.rabbitmq.client.Channel; @Component public class RabbitMQConsumer { @RabbitListener(queues = "myQueue") public void receiveMessage(String message, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) throws Exception { System.out.println("Received message: " + message); // 手动确认消息 channel.basicAck(tag, false); } }
在这个例子中,通过
Channel
的basicAck
方法手动确认消息。如果消息处理失败,可以调用basicNack
方法拒绝消息。
五、测试
启动项目
启动 Spring Boot 项目,确保 RabbitMQ 服务也在运行。
发送消息
在代码中调用生产者类的
sendMessage
方法,发送一条消息。例如:@SpringBootApplication public class RabbitMQApplication { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(RabbitMQApplication.class, args); RabbitMQProducer producer = context.getBean(RabbitMQProducer.class); producer.sendMessage("Hello, RabbitMQ!"); } }
查看消费者输出
观察消费者类的控制台输出,确认是否成功接收到消息。如果一切正常,应该能看到类似以下的输出:
Received message: Hello, RabbitMQ!
通过以上步骤,就可以完成 Spring Boot 整合 RabbitMQ 的基本操作,实现消息的发送和接收。