云计算、AI、云原生、大数据等一站式技术学习平台

网站首页 > 教程文章 正文

大厂面试必问——MQ常见面试题(大厂面试题库)

jxf315 2025-03-25 14:37:37 教程文章 30 ℃

哈哈哈,这一篇其实是上一篇的姊妹篇(大厂面试必问——MQ高可用集群方案),昨天小编耽误了一下,写了一半,现在补上。废话不多说,直接上干活。

如何保证MQ消息不丢失

关于消息丢失,首先我们分析一下消息丢失的原因,然后再提出对应策略。

可能原因:

常见的原因无非以下三种。刚好对应生产者、MQ、消费者。

1,消息生产者没有成功发送到MQBroker

2,消息发送给MQBroker后,Broker宕机导致内存中的消息数据丢失

3,消费者获取到消息,但消费者还没有来得及处理宕机了,但此时MQ中消息已经删除,消费者重启后不能再消费之前的消息

解决方案:

上面我们分析了出现的原因,知道了原因就好处理了。

1.消息发送者发送给MQ Broker后,MQ Broker给生产者确认收到。

2.MQ收到消息后进行消息持久化。

3.消费者收到消息处理完毕后手动进行ack确认。

4.MQ收到消费者ack确认后删除持久化的消息。



如何保证消息不被重复消费

首先我们要知道的是消息为什么会重复,消息重复的根本原因是网络不可达。细分的话,可以分为生产者和消费者的重复。

生产者消息重复

当一条消息已被成功发送到服务端,此时出现了网络闪断,导致服务端对客户端应答失败。如果此时生产者意识到消息发送失败并尝试再次发送消息,消费者后续会收到两条内容相同的消息

消费者消息重复

消息消费的场景下,消息已投递到消费者并完成业务处理,当消费方给MQ服务端反馈应答的时候网络闪断。为了保证消息至少被消费一次,MQ服务端将在网络恢复后再次尝试投递之前已被消费方处理过的消息,此时消费者就会收到两条内容相同的消息。

防止重复消费

防止消息重复消费的核心就是两个字,幂等。所以消息的重复消费和保证幂等性会经常被连着问,当出现了重复消息后,为了保证系统数据的正常性,就必须要保证幂等性。幂等的方式很简单,主要就是标记。

简单地说,幂等主要有以下几步:

1. 消息发送者发送消息时携带一个全局唯一的消息id。

2. 消费者获取消费后先根据id在redis/db中查询是否存在消费记录。

3. 如果没有消费过就正常消费,消费完毕后写入redis/db。

4. 如果消息消费过就直接舍弃。


消息消费的顺序性

消息有序指的是可以按照消息的发送顺序来消费。这个问题也是比较常见的面试题,场景也比较常见。比如我们下单时送积分,肯定是要先支付完成,然后送积分的。

全局顺序消费

要保证全局的顺序性,其核心是生产者,MQ,消费者1:1:1即可。既可以保证消息顺序到达MQ,又可以保证消息顺序消费。但是显然,这种模型有着致命的缺点。会导致吞吐量下降,容错性降低。所以实际上这种模型并不常见。模型结构如下:

局部顺序消费

这种场景是比较常见的,面试时大部分时候问的是这种。其实本质是通过将一组消息发送到同一个MQ中,通过MQ的有序性保证顺序。主要流程如下:

1. 生产者根据消息ID将同一组消息发送到一个Queue中。

2. 多个消费者同时获取Queue中的消息进行消费。

3. MQ使用分段锁保证单个Queue中的有序消费。


福利赠送

又到了大家期待的福利时间了。本次说的是MQ,那么对应送给各位看官大人的也是MQ的面试笔记了。

说了这么多,各位看官大人要怎么获取呢。很简单,关注小编,私信资料」即可获得免费获取方式。

如果大家有比较好的资源欢迎相互交流,共同提高。同时有部分素材来源于网络,如侵,联删

最近发表
标签列表