RabbitMQ 是什么?
RabbitMQ 是一个消息队列(Message Queue,MQ)用于让不同系统模块之间通过“消息”进行通信。
它本质上是一个 专门负责存储和转发消息的服务。
为什么需要 RabbitMQ
假设现在有一个最简单的电商系统。
用户点击 下单。
以前:
用户
│
▼
订单服务
│
├── 扣库存
├── 保存订单
├── 发短信
├── 发优惠券
├── 发邮件
├── 积分增加
├── 通知物流
└── 生成账单全部做完前,用户需要等待。
假设:
扣库存 20ms
保存订单 30ms
短信 500ms
邮件 1000ms
优惠券 300ms用户可能要等待 2s 以上,体验非常不好。
使用 RabbitMQ
用户
│
▼
订单服务
│
├── 扣库存
├── 保存订单
└── 发送一条消息
│
▼
RabbitMQ
├── 短信服务
├── 邮件服务
├── 优惠券服务
├── 积分服务
└── 物流服务我们完全可以只做必要的事情,然后将其他内容交给 RabbitMQ 去慢慢处理。
这样一来用户就不用等待了。
RabbitMQ的三个作用
1.异步
注册功能:
注册成功
↓
发送欢迎邮件邮件发送需要2秒,这完全是没必要的等待时间。
完全可以通过 RabbitMQ 异步发送。
2.解耦
不用MQ时:
订单服务
│
├── 调短信
├── 调邮件
├── 调积分
├── 调物流
└── 调优惠券订单服务与其他系统耦合严重。
而将所有内容都交给 MQ 后:
订单服务
↓
RabbitMQ
↓
短信
邮件
物流
优惠券订单服务与所有系统都解耦了。
3.削峰
如双十一这种高峰期,一分钟可能触发100万次订单,数据库扛不住这种海量调用。
RabbitMQ可以缓存请求:
100万订单
↓
RabbitMQ
↓
数据库
慢慢处理这就是 削峰填谷。