消息队列使用场景

一、异步处理

在一些场景中,为了让用户得到更快的体验,往往会使用一些异步调用的手段使得响应时间更快。

举一个大家都很熟悉的例子:用户注册时,将用户信息写入数据库后,还要给用户发送注册邮件与注册短信。

流程图:

按照上图的设计模式,用户的到响应的时间为t1+t2+t3。

思考一下,其实发送邮件和短信与下一步程序处理没有逻辑关系。所以用户完全不需要等待他们执行完才得到响应。这时可以考虑将t2与t3这段逻辑异步处理,这样用户就只需要等待t1时间就能快速得到响应。

异步处理可以用异步线程,也可以用消息队列。但是这里不推荐使用异步线程,为啥呢?因为异步线程虽然能实现异步处理,但是我们不能确定该条程序有最终没有被执行,而消息队列可以保证消息的持久化,只要放入队列中了,就可以保证大部分消息一定被消费。

二、应用解耦


在商城系统中,用户下单时,需要生成订单与扣减库存。但是如果库存系统宕机了,订单系统就不能正常工作,造成连锁反应,就会降低系统的可用性。

在此,我们可以通过降低两个系统之间的耦合度,让整个系统达到最高的可用性。

三、削峰限流

诸如秒杀与抢红包之类的场景,瞬时请求量非常大,如果这些请求都打到应用服务器上是非常可怕的,这会造成系统宕机,导致系统不可用。


此时业务逻辑为:将用户的请求写入消息队列,当请求队列达到指定长度时,就直接抛弃用户请求,给用户返回错误页面,而队列中剩余的消息由应用服务进行消费。

©️2020 CSDN 皮肤主题: 像素格子 设计师:CSDN官方博客 返回首页