Java面试经常会考察MQ面试题,下面给家总结了一份非常全面的MQ面试题及答案详解,希望对大家面试通关有所帮助。
什么是MQ?
MQ,是Message Queue的简称,就是消息队列的意思,指保存消息的一个容器,本质是个队列。
如下图所示:
有哪些常见的MQ软件?
常见的MQ消息队列有:Apache Kafka、RabbitMQ、RocketMQ、Pulsar、ActiveMQ等。
消息队列MQ整体架构?
MQ整体架构,如下图所示:
MQ一般都会涉及三类角色:
1.Producer 消息生产者
Producer:就是负责产生消息,然后发送消息到 Broker(消息处理中心)。
2.Broker 消息处理中心
Broker:也就是消息处理中心,负责消息存储、确认、重试等。
3.Consumer 消息消费者
Consumer:负责从 Broker 中获取消息,并进行相应处理。
MQ的优点是什么?
MQ具有以下优点:
- 异步通信:发送方可以立即返回,而不必等待接收方的响应,从而提高了应用程序的性能和吞吐量。
- 解耦:发送方和接收方可以独立工作,从而实现了应用程序之间的解耦。
- 可靠性:MQ可以提供消息的可靠传递和持久化存储,从而确保消息不会丢失。
- 扩展性:MQ可以水平扩展,从而满足不断增长的消息处理需求。
消息队列MQ应用场景
消息队列的应用场景,如下图所示:
可以用于应用解耦、异步通信、削峰填谷、日志收集,比如:比如Kafka的应用,解决大量日志传输的问题。
什么是点对点模型?
点对点模用于 消息生产者 和 消息消费者 之间 点到点 的通信,每个消息只有一个消费者(Consumer),即一旦被消费,消息就不再在消息队列中。
什么是发布订阅消息模型?
发布订阅模式,如下图所示:
发布订阅模型包含:主题(Topic)、发布者(Publisher)、订阅者(Subscriber)三个角色。
发布订阅模型,和点对点方式不同,发布消息可以被所有订阅者消费。
RabbitMQ和Kafka有什么区别?
RabbitMQ和Kafka都是常见的MQ软件,它们之间的主要区别包括:
- 架构:RabbitMQ采用AMQP协议,支持多个消费者消费同一个队列,Kafka采用发布-订阅模型,支持多个消费者消费同一个主题。
- 性能:Kafka在处理大量数据时具有很高的性能,而RabbitMQ在处理大量数据时可能会出现性能问题。
- 可靠性:RabbitMQ具有较高的可靠性,可以确保消息不会丢失,Kafka则更注重性能,可以通过调整参数来平衡可靠性和性能。
什么是消息的ACK机制?
ACK,即消息的Ackownledge确认机制,是为了保证消息不丢失。
当Consumer确认消息已经被消费处理,发送一个ACK给消息队列,此时消息队列便可以删除这个消息了。
如何保证MQ的消息传递可靠性?
可以采用以下策略来保证MQ的消息传递可靠性:
- 消息持久化:将消息存储到磁盘中,以确保消息不会丢失;
- 消费者确认:消费者在消费完消息后发送确认消息,以确保消息已被正确消费;
- 重试机制:当消息发送失败时,可以通过重试机制重新发送消息;
- 监控和报警:通过监控和报警系统及时发现问题并进行处理。
如何处理MQ中的重复消息?
可以采用以下策略来处理MQ中的重复消息:
- 去重:在发送消息前对消息进行去重,以确保相同内容的消息不会重复发送;
- 消息去重标识:在消息中添加去重标识,以便在接收到重复消息时进行去重;
- 幂等性:在接收消息时,通过幂等性设计,确保同样的消息被重复消费时产生的影响是相同的。
以上就是常见的MQ面试题及答案,更多的Java面试题及答案,请查看:1000+Java面试题及答案详解。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》