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多应用于大数据领域的实时计算以及日志采集等场景。
非特殊说明,本文版权归 langhai 所有,转载请注明出处。
本文标题: 消息队列面试题
延伸阅读
- 浪海博客系统友情链接说明
- 浪海同志的一生
- 浪海皇室 QQ飞车手游
- 浪海博客系统部署说明
- minio 相关说明
- mysql相关说明
- rabbitMQ 相关说明
- java基础面试题002
- gateway服务网关基本使用
- ribbon负载均衡