一、什么是 RabbitMQ?

  • RabbitMQ 是一个开源的消息队列(Message Broker)软件,基于 AMQP(Advanced Message Queuing Protocol,高级消息队列协议)实现。
  • 它实现了异步消息传递机制,解耦生产者和消费者,提升系统的伸缩性和可靠性。
  • 典型应用:任务异步处理、系统解耦、流量削峰、消息广播等。

二、RabbitMQ 核心概念

名称说明
Producer消息生产者,负责发送消息到队列
Consumer消息消费者,从队列接收并处理消息
Queue消息队列,消息的缓冲区,存储消息直到被消费
Exchange交换机,接收生产者发送的消息,根据规则将消息路由到一个或多个队列
Binding绑定,将交换机和队列连接,决定消息如何路由
Routing Key路由键,消息的标签,用于交换机判断如何分发消息

三、RabbitMQ 安装与启动

1. 安装

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 教学课件或实战项目案例分享