RabbitMQ 概述
RabbitMQ 是一个开源的、跨平台的消息队列中间件,基于 AMQP(高级消息队列协议)标准实现,由 Erlang 语言编写。它在分布式系统中广泛用于实现异步通信、解耦、流量削峰和任务分发。
简单来说,RabbitMQ 就像是一个'邮局',负责在不同程序或服务之间可靠地传递消息。发送方(生产者)和接收方(消费者)无需直接交互,只需通过 RabbitMQ 进行中转。
核心功能与优势
核心功能
- 消息存储与转发:暂存消息并根据规则路由到对应的消费者。
- 多协议支持:除了 AMQP,还支持 MQTT、STOMP 等协议。
- 灵活的路由规则:通过交换机和队列的绑定关系,实现按主题、路由键分发。
- 消息确认机制:确保消息不丢失(生产者确认、消费者确认)。
- 高可用与集群:支持镜像队列、集群部署。
核心优势
- 解耦:生产者和消费者无需知道彼此的存在,降低模块依赖。
- 异步通信:发送后无需等待处理,提高响应速度。
- 流量削峰:突发流量时暂存消息,避免下游服务被压垮。
- 可靠性:支持持久化、重试、死信队列等机制。
- 跨语言/平台:提供多种语言客户端。
核心概念
- 生产者(Producer):将消息发布到交换机的应用程序。
- 消费者(Consumer):从队列中获取消息并处理的应用程序。
- 队列(Queue):消息的存储容器,实际存放消息的地方。
- 交换机(Exchange):接收消息并根据路由规则分发到不同队列。
- Direct:根据精确的路由键匹配。
- Topic:支持通配符模糊匹配。
- Fanout:广播到所有绑定队列。
- 绑定(Binding):连接交换机和队列的规则,定义消息路由条件。
工作流程示例
以 Direct 交换机为例:
- 生产者将消息发送到指定交换机,并指定路由键(如
order.create)。 - 交换机根据绑定规则将消息路由到对应队列。
- 队列存储消息,等待消费者拉取。
- 消费者获取消息并处理。
常见应用场景
- 异步任务处理:如用户注册后异步发送邮件通知。
- 服务间解耦:订单服务发送消息,库存服务自行消费扣减。
- 流量削峰:秒杀活动中请求先进入队列,后端逐步消费。
- 日志收集:多服务日志发送至队列,统一收集存储。
- 分布式事务补偿:协调各服务的最终一致性。
安装与配置
1. 安装 RabbitMQ
在 Linux 环境下执行以下命令:
sudo apt install rabbitmq-server


