RabbitMQ 简介

RabbitMQ 是一款开源的消息中间件(Message Broker),实现了 AMQP 0-9-1 协议,用 Erlang 语言编写。它把"发消息的程序"与"处理消息的程序"解耦开:生产者只管把消息交给 RabbitMQ,消费者按自己的节奏取走,两边互不知道对方的存在。

为什么需要消息中间件

服务之间直接 HTTP 调用有三大痛点:服务 A 挂了服务 B 立刻失败(耦合紧)、慢操作阻塞请求(同步等待)、流量突增直接打垮下游(无缓冲)。消息中间件把"直接调用"改成"投递进消息系统",从而解决这三个问题:

解决的问题说明生活化例子
系统解耦上下游只依赖 MQ,互不感知对方存在下单服务不必知道短信、积分服务是否存在
异步提速耗时操作放后台做,接口立刻返回注册成功后异步发邮件,不用等邮件发完
削峰填谷洪峰流量先入 MQ,下游按自身能力消费秒杀订单先排队,再慢慢落库处理

RabbitMQ 核心特性

RabbitMQ 不是最简单的消息系统,却是路由最灵活、生态最完整的之一,常用特性:

特性说明
可靠投递发送方确认、消费方 ack、消息持久化,消息不容易丢
灵活路由交换机 + 绑定 + routing key,一对一、一对多、多对多随心配置
集群高可用支持集群、镜像/仲裁队列,单点故障可恢复
多协议多语言原生 AMQP,另可启用 MQTT/STOMP 插件;官方客户端覆盖几乎所有语言
管理完善网页控制台、HTTP API、监控指标齐全

典型应用场景

RabbitMQ 适合"业务消息"而非"海量日志流",常见用法如下:

场景怎么用
异步通知注册、下单后异步发短信/邮件/站内信
任务队列图片处理、报表生成等耗时任务交给 worker 排队消费
事件分发一条订单事件广播给库存、积分、搜索等多个服务
削峰秒杀、抢购请求先写入 MQ,按下游吞吐量慢慢消费
轻量日志收集各服务把日志推到交换机,按级别路由到不同队列

与其他消息中间件的关系

常被放在一起比较的三兄弟,一句话定位:

中间件一句话定位
RabbitMQ路由灵活、功能全面,适合业务消息、任务队列与 RPC
Kafka高吞吐、日志可重放,适合日志/事件流与大数据管道
RocketMQ电商交易链路成熟,事务消息与削峰场景见长

大方向:追求超高吞吐与事件流选 Kafka,电商交易链路选 RocketMQ;业务解耦、灵活路由、要控制台好用的场景,RabbitMQ 是很稳的选择。

小结

RabbitMQ = 基于 AMQP 的消息中间件,核心价值是解耦、异步、削峰。下一章进入它的协议与消息模型,把交换机、队列、绑定这三件套弄明白,后面所有用法都建立在这套模型之上。

笔记加载中…