Spring Boot集成RabbitMQ的过程之可靠性与性能提升的问题记录
作者:愿你天黑有灯下雨有伞
一、环境准备
安装 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 的基本操作,实现消息的发送和接收。
到此这篇关于Spring Boot集成RabbitMQ的过程之可靠性与性能提升的文章就介绍到这了,更多相关Spring Boot集成RabbitMQ内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
