RabbitMQ 入门教程(Python 版 · 超详细)
·
RabbitMQ 是企业级系统中最常用的消息队列中间件之一,广泛应用于订单系统、日志系统、异步任务、削峰填谷、微服务解耦等场景。
本文将从 基础概念 → 安装 → 核心模型 → Python 实战 → 常见问题 带你快速入门 RabbitMQ。
一、RabbitMQ 是什么?
RabbitMQ 是一个基于 AMQP(Advanced Message Queuing Protocol) 的开源消息队列中间件,用于实现系统之间的异步通信。
它的核心价值包括:
- 解耦:服务之间不直接调用
- 削峰填谷:高峰期写入队列,后台慢慢处理
- 异步处理:提升系统响应速度
- 可靠性:持久化、ACK、死信队列
- 灵活路由:多种交换机类型满足复杂业务
RabbitMQ 是业务系统中最常用的 MQ,而 Kafka 更适合大数据场景。
二、RabbitMQ 的核心概念(必须掌握)
RabbitMQ 的模型由以下几个核心组件组成:
1. Producer(生产者)
负责发送消息。
2. Consumer(消费者)
负责接收消息。
3. Queue(队列)
消息真正存储的地方。
4. Exchange(交换机)
负责路由消息,不存储消息。
5. Binding(绑定)
交换机与队列之间的路由规则。
6. Routing Key(路由键)
生产者发送消息时指定的关键字,用于匹配绑定规则。
7. Virtual Host(虚拟主机)
RabbitMQ 的多租户隔离机制。
三、RabbitMQ 的四种交换机(必须理解)
| 类型 | 路由规则 | 是否使用 routing_key | 场景 |
|---|---|---|---|
| Direct | 精确匹配 | 是 | 订单状态、日志级别 |
| Fanout | 广播 | 否 | 广播通知、缓存更新 |
| Topic | 通配符匹配 | 是 | 日志系统、复杂路由 |
| Headers | 根据 headers 匹配 | 否 | 协议类消息 |
四、安装 RabbitMQ(Docker 方式最简单)
docker run -d --name rabbitmq \
-p 5672:5672 -p 15672:15672 \
rabbitmq:3.12-management
访问管理界面:
http://localhost:15672
账号:guest
密码:guest
五、Python 连接 RabbitMQ(pika 库)
安装依赖:
pip install pika
六、Python 生产者(发送消息)
import pika
connection = pika.BlockingConnection(
pika.ConnectionParameters(host='localhost')
)
channel = connection.channel()
# 声明队列(持久化)
channel.queue_declare(queue='hello', durable=True)
message = "Hello RabbitMQ!"
channel.basic_publish(
exchange='',
routing_key='hello',
body=message,
properties=pika.BasicProperties(
delivery_mode=2 # 消息持久化
)
)
print("发送成功:", message)
connection.close()
七、Python 消费者(接收消息)
import pika
connection = pika.BlockingConnection(
pika.ConnectionParameters(host='localhost')
)
channel = connection.channel()
channel.queue_declare(queue='hello', durable=True)
def callback(ch, method, properties, body):
print("收到消息:", body.decode())
ch.basic_ack(delivery_tag=method.delivery_tag)
channel.basic_qos(prefetch_count=1)
channel.basic_consume(
queue='hello',
on_message_callback=callback
)
print("等待消息中...")
channel.start_consuming()
八、消息持久化(防止 RabbitMQ 重启丢消息)
需要同时满足:
- 队列 durable=True
- 消息 delivery_mode=2
- 交换机 durable=True(如果使用交换机)
示例:
channel.queue_declare(queue='task', durable=True)
channel.basic_publish(
exchange='',
routing_key='task',
body='msg',
properties=pika.BasicProperties(delivery_mode=2)
)
九、ACK 机制(防止消息丢失)
消费者必须手动 ack:
ch.basic_ack(delivery_tag=method.delivery_tag)
如果消费者挂掉,RabbitMQ 会重新投递消息。
十、RabbitMQ 的典型使用场景
- 订单系统削峰
- 异步发送短信/邮件
- 日志收集
- 延迟任务(订单超时取消)
- 库存扣减异步化
- 微服务解耦
- 广播通知(缓存更新)
十一、常见问题(排查指南)
1. 连接失败
检查:
- RabbitMQ 是否启动
- 端口是否开放(5672)
- 用户名密码是否正确
2. 消息重复消费
解决:
- 使用 ACK
- 消费端实现幂等性(如唯一业务 ID)
3. 消息堆积
解决:
- 增加消费者
- 提高消费速度
- 使用 prefetch_count
4. 消息丢失
确保:
- 队列 durable
- 消息 persistent
- 使用 confirm + ack
RabbitMQ 是业务系统中最重要的基础组件之一,掌握它的交换机模型、可靠性机制、持久化、ACK、Python 生产者/消费者,就能应对绝大多数企业级场景。
更多推荐



所有评论(0)