Skip to content

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



数据库

慢慢处理

这就是 削峰填谷