使用场景
1、异步处理
用户注册后,需要发注册邮件和注册短信,传统的做法有两种1.串行的方式;2.并行的方式
(1)串行处理方式:注册信息写数据库-发送注册邮件-发送注册短信,等上述三个操作都执行完成之后给客户端发送注册操作反馈,这其中发送邮件、短信一般都是不需要立刻执行,也就是说这两个操作等待的时间对用户来说其实不是必须的。
(2)并行处理方式:注册信息写数据库-发送邮件和注册信息。
消息队列的引入:注册操作将注册信息写入数据库,同时将需要发送到邮箱和短信的信息组合发送到队列中(假设邮件队列和短信队列),执行到这里服务端就可以给客户端的注册操作进行反馈,大大缩短了等待时间。最后再写一个服务去处理队列中的数据。
2、应用解耦
假设一个电商网站有订单系统和库存系统模块,当订单系统中有数据写入时,正常情况下是马上去调用库存系统对商品相应的库存数据进行处理,这样做会存在如下问题:
1、当库存系统挂掉之后,订单就会失效(假设不存在其他处理方法),这对于老板来说是不能容忍的经济损失。
消息队列的引入:订单数据写入队列(假设订单队列)返回下单成功,再写一个服务去处理队列中的数据。
3、流量控制
加入淘宝双十一,有个"秒杀"活动,而秒杀名额有限,正常来讲参与秒杀的用户数量会远远大于最终秒杀成功的用户数,故在秒杀那刻请求了突然暴增,如果超过系统处理上限,势必会影响系统的正常运行。
消息队列的引入:将参与秒杀的用户请求数据写入队列(假设秒杀队列),系统设置允许成功秒杀用户阈值,再对应的去处理队列中的秒杀请求数据。