RabbitMQ安装与使用教程(含Spring Boot整合)
一、RabbitMQ简介
RabbitMQ是一个开源的消息代理软件,实现了高级消息队列协议(AMQP),在分布式系统中广泛用于异步通信、解耦组件以及流量削峰等场景。它支持多种消息模式,如点对点、发布/订阅等,具备高可靠性、可扩展性和丰富的功能特性。
二、RabbitMQ安装
1. 安装Erlang环境
RabbitMQ是用Erlang语言编写的,因此需要先安装Erlang运行环境。以下以Ubuntu系统为例进行安装:
• 更新软件包列表:
bash sudo apt-get update
• 安装Erlang:
bash sudo apt-get install erlang
2. 安装RabbitMQ
• 添加RabbitMQ官方仓库:
bash echo "deb https://dl.bintray.com/rabbitmq/debian $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list
• 导入仓库密钥:
bash wget -O - 'https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc' | sudo apt-key add -
• 再次更新软件包列表并安装RabbitMQ:
bash sudo apt-get update sudo apt-get install rabbitmq-server
3. 启动RabbitMQ服务
• 启动服务:
bash sudo systemctl start rabbitmq-server
• 查看服务状态:
bash sudo systemctl status rabbitmq-server
4. 访问RabbitMQ管理界面
RabbitMQ自带一个方便的管理界面,通过以下命令开启:
sudo rabbitmq-plugins enable rabbitmq_management
然后在浏览器中访问 http://服务器IP地址:15672
,默认用户名和密码都是 guest
,登录后可以进行各种管理操作。
三、Spring Boot整合RabbitMQ
1. 创建Spring Boot项目
可以使用Spring Initializr(https://start.spring.io/ )快速创建一个Spring Boot项目,在依赖中添加 Spring for RabbitMQ
。在项目创建过程中,选择合适的Java版本和Spring Boot版本,并添加 spring-boot-starter-amqp
依赖。
2. 配置application.properties或application.yml
在 src/main/resources
目录下的 application.properties
(或 application.yml
)文件中添加RabbitMQ连接信息:
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
四、定义一般队列
1. 配置队列
创建一个配置类来定义队列:
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitConfig {
@Bean
public Queue normalQueue() {
return new Queue("normalQueue", true, false, false);
}
}
这里创建了一个名为 normalQueue
的队列,true
表示队列持久化(消息在服务器重启后仍存在),第二个 false
表示非排他队列(多个消费者可以同时消费),第三个 false
表示自动删除(消息处理完后队列是否自动删除)。
2. 生产者发送消息
创建一个消息生产者类:
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class NormalQueueProducer {
@Autowired
private RabbitTemplate rabbitTemplate;
public void sendMessage(String message) {
rabbitTemplate.convertAndSend("normalQueue", message);
}
}
3. 消费者接收消息
创建一个消息消费者类:
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Service;
@Service
public class NormalQueueConsumer {
@RabbitListener(queues = "normalQueue")
public void receiveMessage(String message) {
System.out.println("Received message from normalQueue: " + message);
}
}
五、定义私信队列(Fanout Exchange)
1. 场景说明
假设有一个消息发布系统,需要将同一条消息广播给多个不同的接收方,例如新闻发布系统将一条新闻消息同时发送给多个订阅者,这种情况下就可以使用 Fanout Exchange
(