RabbitMQ 的应用场景以及基本原理介绍
1.背景
RabbitMQ 是一个由 erlang 开发的 AMQP(Advanved
Message Queue) 的开源实现。
2.应用场景
2.1 异步处理
场景说明: 用户注册后, 需要发注册邮件和注册短信 ,传统的
做法有两种 1.串行的方式 ;2.并行的方式
(1)串行方式 :将注册信息写入数据库后 ,发送注册邮件 ,再发
送注册短信 ,以上三个任务全部完成后才返回给客户端。 这
有一个问题是 ,邮件 ,短信并不是必须的 ,它只是一个通知 ,而
这种做法让客户端等待没有必要等待的东西 .
(2)并行方式 :将注册信息写入数据库后 ,发送邮件的同时 ,发
送短信 ,以上三个任务完成后 ,返回给客户端 ,并行的方式能提
高处理的时间。
假设三个业务节点分别使用 50ms, 串行方式使用时间
150ms, 并行使用时间 100ms 。虽然并性已经提高的处理时
间 ,但是 ,前面说过 ,邮件和短信对我正常的使用网站没有任何
影响,客户端没有必要等着其发送完成才显示注册成功 ,英爱
是写入数据库后就返回 .
(3)消息队列
引入消息队列后, 把发送邮件 ,短信不是必须的业务逻辑异步
处理
由此可以看出 ,引入消息队列后, 用户的响应时间就等于写入
数据库的时间 +写入消息队列的时间 (可以忽略不计 ),引入消
息队列后处理后 ,响应时间是串行的 3 倍 ,是并行的 2 倍。
2.2 应用解耦
场景:双 11 是购物狂节 ,用户下单后 ,订单系统需要通知库存
系统 ,传统的做法就是订单系统调用库存系统的接口 .
这种做法有一个缺点 :
当库存系统出现故障时 ,订单就会失败。 (这样马云将少赚好
多好多钱 ^ ^)订单系统和库存系统高耦合 .
引入消息队列
订单系统 :用户下单后 ,订单系统完成持久化处理 ,将消息写入
消息队列 ,返回用户订单下单成功。库存系统 :订阅下单的消
息 ,获取下单消息 ,进行库操作。
就算库存系统出现故障 ,消息队列也能保证消息的可靠投递 ,
不会导致消息丢失 (马云这下高兴了 ).
流量削峰
流量削峰一般在秒杀活动中应用广泛
场景 :秒杀活动,一般会因为流量过大,导致应用挂掉 ,为了
解决这个问题
系统/消息/注册/时间/订单/库存/写入/方式/邮件/发送/
系统/消息/注册/时间/订单/库存/写入/方式/邮件/发送/
-->