Version: Next

RabbitMQ 应用场景

异步处理

用户注册后,需要发注册右键和注册短信,传统做法有两种:串行 | 并行

  • 串行:将注册信息写入数据库后,发送注册成功通知邮件,再发送注册成功通知短信,以上三个任务全部完成后才返回给客户端,此处通知性质的邮件和短信,是非必须的,没必要让用户必须阻塞等待
  • 并行:将注册信息写入数据库后,发送邮件的同时发送短信,以上三个任务完成后,返回客户端,并行的方式能提高处理效率
  • 消息队列::假设三个业务分别耗时 50ms,那么串行方式耗时 50 * 3 = 150ms,并行耗时 100ms
    • 并行虽然已经提高了效率,但它还是在发送邮件期间出现了阻塞,只是相比串行时间比较短
    • 引入消息队列,可以让邮件、短信逻辑彻底异步处理,相比先前的 50ms 消息队列发送消息的耗时可能为 5ms

应用解耦

订单系统 调用 库存系统

  • 如果库存系统出现故障,会导致订单失败
  • 订单系统和库存系统产生了耦合

引入消息队列

  • 订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功
  • 库存系统:订阅下单消息,获取下单消息,进行库操作,即使库存系统出现了故障,消息队列也能保证消息的可靠传递,不会导致消息丢失

流量削峰

秒杀场景,使用消息队列缓存请求

  • 可以控制活动人数,超过此一定阈值的订单直接丢弃
  • 可以缓解短时间高流量压垮应用