消息队列面试题 ~ langhai

林书豪
2023-06-09 10:48:44
消息队列面试题 浪海值:1470度
文章标签:rabbitMQ消息队列
文章摘要:消息队列面试题
使用新的显示器:新的显示器 如果遇到图片单击即可放大/缩小。

https://gitee.com/shishan100/Java-Interview-Advanced (版权说明 此篇文章是学习记录 参考中华石杉--互联网Java面试训练营)仅供学习使用,如有侵权请联系 [email protected]进行删除。

为什么使用消息队列?

使用消息队列有哪些场景,具体结合自己的项目使用MQ是什么样的业务场景。在这样一个业务场景下使用哪一种消息队列技术。使用MQ之前需要考虑MQ带来的麻烦,以及使用MQ给系统带来的好处。

MQ的三个核心的好处:解耦、异步、削峰。

解耦:系统之间严重耦合,多个模块或者多个系统之间相互调用,如果这个接口不需要同步调用的,可以考虑使用MQ对其进行异步解耦。

异步:A系统接送一个用户的请求,A系统本身需要花费100ms来处理,还需要调用BCD三个系统。总共耗时超过1s。如果使用MQ,那么A系统只需要发送消息到MQ队列中,发送完毕之后直接返回。这样总体时间缩短了许多。

削峰:应用整天大部分时间的请求数量比较低,在某一个时间段的请求数量会暴涨。相应的MySQL的查询压力也会增大,有可能直接把MySQL打死,导致整个应用崩溃。如果使用MQ,将处理不过来的请求先堆积在MQ队列当中,逐步消费MQ队列当中的消息,消费速度不要超过自己每秒能处理的最大请求数量即可。

使用MQ给系统带来的缺点:

系统可用性降低:系统引用的外部组件或者外部依赖,带来的风险就越多,会增加系统崩溃的风险。

系统复杂度提高:引入MQ组件,会提升系统的复杂度,给系统带来诸多问题。

一致性问题:A系统在利用MQ发送完消息之后就直接返回成功了,但是接收消息的BCD系统里面,有可能部分系统没有成功处理这条数据,这样就造成了数据不一致的情况。


Kafka、ActiveMQ、RabbitMQ、RocketMQ各种MQ技术对比。

ActiveMQ和RabbitMQ在单机吞吐量远不如RocketMQ和Kafka。ActiveMQ没经过大规模的吞吐量场景的验证,社区活跃度较低,一般不推荐使用ActiveMQ。

RabbitMQ采用erlang语言开发,对于公司的java工程师来说定制化比较困难。社区活跃度比较高,在时效性方面做的非常好达到了微秒级,也就是说延迟最低。

RocketMQ是阿里的产品,经历过双11极致流量场景的验证,如果公司基础架构研发实力较强的话可以选择RocketMQ。

Kafka多应用于大数据领域的实时计算以及日志采集等场景。

提交评论