RabbitMQ 简介
RabbitMQ 是一个开源的、跨平台的消息队列中间件,基于 AMQP(高级消息队列协议)标准实现,由 Erlang 语言编写。它在分布式系统中广泛用于异步通信、解耦、流量削峰和任务分发。
通俗点讲,RabbitMQ 就像是一个'邮局',负责在不同程序或服务之间可靠地传递消息。发送方(生产者)和接收方(消费者)无需直接交互,只需通过 RabbitMQ 中转即可。
核心功能与特点
- 消息存储与转发:生产者将消息发送到 RabbitMQ,它暂存并根据规则路由到对应的消费者。
- 多协议支持:虽然基于 AMQP,但也支持 MQTT、STOMP 等协议。
- 灵活的路由规则:通过交换机和队列的绑定关系,实现按主题、路由键分发等复杂逻辑。
- 消息确认机制:确保消息不丢失(生产者确认、消费者确认)。
- 高可用与集群:支持镜像队列、集群部署,保障服务可靠性。
核心概念
- 生产者(Producer):发送消息的应用程序,将消息发布到交换机中。
- 消费者(Consumer):接收消息的应用程序,从队列中获取并处理。
- 队列(Queue):消息的存储容器,实际存放消息的地方。
- 交换机(Exchange):接收生产者发送的消息,根据路由规则分发到不同的队列。常见类型包括 Direct(直连)、Topic(主题)、Fanout(广播)和 Headers(头部)。
- 绑定(Binding):连接交换机和队列的规则,定义哪些消息应该被路由到哪个队列。
工作流程(以 Direct 交换机为例)
- 生产者将消息发送到指定的交换机,并指定路由键(例如
order.create)。 - 交换机根据绑定规则将消息路由到对应的队列。
- 队列存储消息,等待消费者拉取。
- 消费者从队列中获取消息并处理。
常见应用场景
- 异步任务处理:如用户注册后发送邮件通知,避免阻塞主流程。
- 服务间解耦:订单服务发送'创建订单'消息,库存服务自行消费扣减库存。
- 流量削峰:秒杀活动中突发请求先进入队列,后端服务逐步消费。
- 日志收集与监控:多个服务将日志发送到 RabbitMQ,由日志服务统一收集。
- 分布式事务补偿:协调各服务的最终一致性。
RabbitMQ 与相关技术对比
| 对比项 | RabbitMQ | Kafka | Redis(Stream) |
|---|---|---|---|
| 设计目标 | 通用消息队列(可靠、灵活路由) | 高吞吐、分布式日志流处理 | 轻量级消息队列(简单场景) |
| 协议 | AMQP(及其他) | 自研协议 | Redis 协议 |
| 消息模型 | 交换机 + 队列(灵活路由) | 主题分区(Pub/Sub 或 Stream) | List/PubSub/Stream |
| 可靠性 | 高(支持持久化、确认机制) | 高(副本机制) |












