Version: Next
RabbitMQ 应用场景
异步处理
用户注册后,需要发注册右键和注册短信,传统做法有两种:
串行
|并行
- 串行:将注册信息写入数据库后,发送注册成功通知邮件,再发送注册成功通知短信,以上三个任务全部完成后才返回给客户端,此处通知性质的邮件和短信,是非必须的,没必要让用户必须阻塞等待
- 并行:将注册信息写入数据库后,发送邮件的同时发送短信,以上三个任务完成后,返回客户端,并行的方式能提高处理效率
消息队列:
:假设三个业务分别耗时50ms
,那么串行方式耗时50 * 3 = 150ms
,并行耗时100ms
- 并行虽然已经提高了效率,但它还是在发送邮件期间出现了阻塞,只是相比串行时间比较短
- 引入消息队列,可以让邮件、短信逻辑彻底异步处理,相比先前的
50ms
消息队列发送消息的耗时可能为5ms
应用解耦
订单系统 调用 库存系统
- 如果库存系统出现故障,会导致订单失败
- 订单系统和库存系统产生了耦合
引入消息队列
- 订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功
- 库存系统:订阅下单消息,获取下单消息,进行库操作,即使库存系统出现了故障,消息队列也能保证消息的可靠传递,不会导致消息丢失
流量削峰
秒杀场景,使用消息队列缓存请求
- 可以控制活动人数,超过此一定阈值的订单直接丢弃
- 可以缓解短时间高流量压垮应用