一、什么是 RabbitMQ?
- RabbitMQ 是一个开源的消息队列(Message Broker)软件,基于 AMQP(Advanced Message Queuing Protocol,高级消息队列协议)实现。
- 它实现了异步消息传递机制,解耦生产者和消费者,提升系统的伸缩性和可靠性。
- 典型应用:任务异步处理、系统解耦、流量削峰、消息广播等。
二、RabbitMQ 核心概念
名称 | 说明 |
---|---|
Producer | 消息生产者,负责发送消息到队列 |
Consumer | 消息消费者,从队列接收并处理消息 |
Queue | 消息队列,消息的缓冲区,存储消息直到被消费 |
Exchange | 交换机,接收生产者发送的消息,根据规则将消息路由到一个或多个队列 |
Binding | 绑定,将交换机和队列连接,决定消息如何路由 |
Routing Key | 路由键,消息的标签,用于交换机判断如何分发消息 |
三、RabbitMQ 安装与启动
1. 安装
- 官方地址:https://www.rabbitmq.com/download.html
- 支持 Windows、Linux、MacOS 等多平台
- 安装时需要先安装 Erlang 环境
2. 启动服务
# 启动 RabbitMQ 服务(Linux)
sudo systemctl start rabbitmq-server
sudo systemctl enable rabbitmq-server # 开机自启动
# Windows 系统通过服务管理器启动
3. 管理控制台
默认开启管理插件,访问:http://localhost:15672
默认账号:admin/admin
四、RabbitMQ 基本使用示例(Node.js)
1. 安装 amqplib
npm install amqplib
2. 生产者代码(send.js)
const amqp = require('amqplib');
async function send() {
const connection = await amqp.connect('amqp://localhost');
const channel = await connection.createChannel();
const queue = 'task_queue';
const msg = 'Hello RabbitMQ';
await channel.assertQueue(queue, { durable: true }); // 声明持久队列
channel.sendToQueue(queue, Buffer.from(msg), { persistent: true });
console.log("消息已发送:", msg);
setTimeout(() => {
connection.close();
process.exit(0);
}, 500);
}
send().catch(console.error);
3. 消费者代码(receive.js)
const amqp = require('amqplib');
async function receive() {
const connection = await amqp.connect('amqp://localhost');
const channel = await connection.createChannel();
const queue = 'task_queue';
await channel.assertQueue(queue, { durable: true });
channel.prefetch(1); // 每次只处理一条消息,避免积压
console.log("等待接收消息...");
channel.consume(queue, msg => {
if (msg !== null) {
const content = msg.content.toString();
console.log("接收到消息:", content);
// 模拟任务处理耗时
setTimeout(() => {
channel.ack(msg); // 手动确认消息
}, 1000);
}
}, { noAck: false });
}
receive().catch(console.error);
五、总结
- RabbitMQ 是强大的消息队列系统,广泛应用于分布式系统中。
- 理解队列、交换机、路由键等核心概念,是掌握RabbitMQ的基础。
- 通过简单的生产者-消费者模型,可以快速上手RabbitMQ异步消息处理。
- 实际项目中还需要深入了解交换机类型(Direct、Fanout、Topic)、消息确认、死信队列等高级特性。
如果你需要,我还可以帮你:
- 编写 RabbitMQ 高级用法教程(交换机类型、消息确认机制、延迟队列等)
- 提供其他语言示例代码(Python、Java、Go 等)
- 做成 PPT 教学课件或实战项目案例分享
发表回复