阅读本文大概需要 3.9分钟。
你好,我是测试小牛。
最近这年头,面试找工作不问点中间件相关知识好像说不过去,而面试考察最多的中间件就是缓存数据库Redis和消息中间件MQ。
关于Redis相关面试技能之前总结过,详情参考这篇文章:
今天来聊聊MQ相关知识,以及面试常考点有哪些,废话不多说,直接怼干货!
首先,MQ 是 Message Queue(消息队列)的简称,主要用来在分布式系统中传递消息,消息的格式一般是json格式。
给大家举个例子,假设我们有一个简单的订单系统,订单系统需要将用户下单的消息发送到 MQ 中,消息内容包含订单 ID、用户 ID、下单时间等信息。则发送的消息可能长这样:
然后订单系统将上面的消息发送到MQ消息队列中去,然后等待其它系统进行接收消费消息即可,以上就是消息队列的一个简单过程,先建立一个直观认识,帮助大家去更好的理解MQ是什么东西。
一.项目中为什么使用MQ,它的用途,优缺点是什么?
优点:
缺点:
二.消息队列的工作原理是什么?
当生产者产生一条消息后,消息会被发送到消息队列中,消费者对消息进行消费,从而实现生产者与消费者之间的消息通信。
三.说下常见的MQ有哪些,有什么区别?项目中如何选择哪个消息队列?
目前市场上公司用的最多的MQ有三种,分别是RabbitMQ,Kafka,RocketMQ。
RabbitMQ 使用的是 AMQP 协议和消息持久化的方式进行数据存储;Kafka 利用磁盘存储技术进行数据持久化,数据存储效率高,但不支持事务;RocketMQ 利用多级存储技术进行数据持久化,支持顺序写和随机读操作,数据存储可靠性高。
RabbitMQ 适用于高并发、高吞吐量的交换场景;Kafka 适用于日志收集和分析等场景;RocketMQ 适用于分布式架构和海量数据处理的场景。
四.详细介绍下目前使用相对更多的Kafka,以及它的优缺点?
Kafka 是由Apache Software Foundation 公司开发的,具有高可用、高性能、水平扩展能力强等特点,适用于大规模数据处理和实时数据采集等场景。
它的优点是能够支持每秒百万级别的消息处理,具有出色的吞吐量。支持TB级别的消息存储。消息可靠性高,不容易出现数据丢失和消息重复等问题。同时,Kafka也支持消息的备份和复制,可以提供更高的可靠性保障。
它的缺点是配置复杂,其集群部署和维护需要相应的技术背景和专业知识。一般需要有专业的运维人员进行管理,所需的经验要求比较高。
而且因为Kafka分布式集群机制和大数据存储特性使得它不太适合小规模的系统,因为这样会增加系统构建和维护的难度。
五.MQ如何避免消息重复消费?
消息去重:当消息生产者向消息队列系统发送消息时,使用全局唯一的 MessageID 或者业务主键作为消息的唯一标识,在消费者消费消息时,根据该消息唯一标识进行去重,避免重复消费。
消息锁定:当消息消费者处理一条消息时,首先将消息锁定,然后消费并完成处理逻辑,最后再将消息解锁。这样,其他消费者在消费该条消息时,发现其被锁定,就不会进行消费,从而避免消息的重复消费。
六.如何保证消息不丢失?
消息队列将接收到的消息持久化到磁盘中,以保证在消息队列异常或者重启的情况下,消息不会丢失。
七.说说你们项目中MQ一般怎么测试的,有哪些注意的点?
首先就是进行正向的业务逻辑测试,比如消息发送的字段以及接收的字段有无缺失等,以及对比是否相同。以及根据需求业务保证系统处理消息的正确性跟完整性。
其次进行反向的异常测试,在消息队列消费时,需要考虑各种异常情况,如消息重复消费、消息丢失、网络异常等,需要针对性地进行异常测试,验证系统对异常情况的处理能力。
除此之外,还需要考虑消息发失败重试的情况,在消息消费过程中,可能会出现因为异常等原因导致消费失败的情况,此时需要进行重试。
在重试测试中,需要模拟消费失败,验证消息队列系统对消息的重新处理能力以及对幂等性的支持。
最后,还需要考虑性能测试,在高并发访问的情况下系统正确处理消息的能力,是否会出现消息队列拥堵,宕机等情况。
以上,就是MQ面试经常考的相关知识点了。
因为今年行情不行,很多同学找工作投递了很多简历,连面试机会都没有,可以扫描下方二维码加我微信优化简历以及做面试辅导~添加备注简历即可!