消息队列常见面试题:为什么要使用消息队列,谈谈你对消息队列的理解
消息队列大家应该都不陌生,不管是在日常学习还是在开发过程中,多多少少都会有所接触。它作为一个中间件,在分布式环境下所起的作用越来越大,也是面试官经常重点考察的对象。所以,今天咱们就来好好聊聊关于消息队列的那些事儿。
消息队列,您可以简单理解为一条一条的消息在排队等待消费,就像超市买菜排队付款或者排队上飞机,凡是能排队做的事,都能用消息队列。网上买东西同样需要排队,可能有人会说,我点确认付款后马上就显示成功了,没感觉到排队呀。其实在后台系统中是排了队的,只不过排队时间对人来说比较短,可能几秒就结束了。
排队的策略有很多,常见的就是应用消息队列将相关指令做一个排队,等待业务方慢慢处理。消息发布者只管把消息发布到 MQ 中,不用管谁来取;消息使用者也只管从 MQ 中取消息,不管是谁发布的。这样发布者和使用者都不用知道对方的存在,就能把相关事务处理掉。
举个常见的例子,下单送积分。用户下单很重要,需要同步处理,尽快给用户返回下单成功与否,这属于重要紧急的事务。而送积分的操作可以异步去做,还有短信通知、日志记录等,不需要那么快处理,晚几秒钟甚至几十秒钟都无关紧要。为了应对这类异步操作,消息队列技术应运而生。下单成功就发个消息给积分中心排队处理送积分业务,再发个消息给通知中心排队处理支付成功通知的业务,再发个消息给日志中心排队记录用户的重要操作。这些操作响应不用很及时,所有指令进行排队,等到业务不忙的时候再处理,这种场景也叫流量削峰。
我们不用把所有操作都打包在一个下单的接口里面,而是把业务做了一些拆分。比如积分中心专门处理积分,通知中心专门处理短信推送。这种按照不同的业务类型拆分的业务中心的行为,我们叫做应用解耦。彼此之间也可以通过消息队列来进行调用。
总结下来,我们应用消息队列无外乎三个方面:一是业务处理,二是流量削峰,三是应用解耦。
好啦,今天关于消息队列的内容就聊到这儿,如果您对本期内容有任何疑问,欢迎在评论区给我留言。谢谢大家!