《消息队列》常问面试题

article/2025/9/18 15:13:13

1、为什么要使用消息队列?(消息队列的应用场景)

这个问题主要考察为什么使用消息队列?在项目中为了解决什么问题?

消息队列的本质

  • 消息队列是一种“先进先出”的数据结构

  • 常见应用场景:解耦、异步、削峰

解耦

订单系统强依赖“支付系统”、“库存系统”、“物流系统”的返回结果。图一为强耦合关系,图二为消息队列解耦后。

异步

 流量削峰

 

 2、各种消息队列产品的比较?

MQ选型总结

  • activeMQ:早期使用较多,没经过大规模吞吐量场景验证,社区不是很活跃,现在使用的不多,不推荐

  • RabbitMQ:开发语言使用erlang,对于java开发工程师二次开发门槛较高,但rabbitMQ是开源的,社区活跃度较高,追求性能和稳定性的话,推荐使用。

  • 开发语言是java,在阿里内部经受过高并发的考验,稳定性和性能军不错,若考虑二次开发,推荐使用。

  • kafka:大数据领域的实时计算、日志采集等场景。用kafka业内的标准,社区活跃,推荐使用。大数据领域、日志采集等业务推荐使用。

3、消息队列的优点和缺点?

优点:解耦、异步、流量削峰

缺点:系统可用性降低、系统复杂性提高、一致性问题

4、如何保证消息队列的高可用性?

rabbitMQ的高可用性

普通集群模式

消息只存贮在mq某个实例上,其他节点从通过queue的元数据从该实例的queue取数据

特点:没有做到真正的高可用;数据拉取开销和单实例的瓶颈问题。

 镜像集群模式

 rocketMQ的高可用性-双主双从

5、如何保证消息不丢失?

消息丢失的原因

  • 消息生产者没有成功发送到MQ broker

  • 消息发送到mq broker后,broker宕机导致内存中的消息数据丢失

  • 消费者消费了消息,但是没有处理完毕就发生异常导致消息丢失。

 

 

确保消息不丢失方案

  • 发送方可靠发送

  • mq进行消息持久化

  • 消费放完成消费后进行ack确认,mq收到ack确认再删除本地消息

 

6、如何保证消息不被重复消费?(即保证消息的幂等性)

重复消息产生的根本原因:网络不可达

发送时消息重复

 

 消费时消息重复

 

 

解决消息重复发送问题–消息密等性

  • 消息发送者发送消息时携带一个全局唯一的消息id

  • 消费者获取消费后先根据id再db/redis查询消息是否成功消费

  • 如果没有消费过直接消费,消费完成后写入db/redis

  • 如果消费过则不予处理

7、如何保证消息的顺序性?

全局顺序消费:生产者:MQ:消费者=1:1:1

局部顺序消费

  • 生产者根据消息id将同意组消息发送到一个queue中

  • 多个消费者同时获取queue中的消息进行消费

  • mq使用分段锁保证单个queue中的有序消费

 

8、大量消息推挤处理怎么办?

堆积消息的原因:

  • 网络故障

  • 消费方处理消息后没有给mq broker正常应答

 

消息堆积的处理方案

  • 检查并修复消费方的正常消费速度

  • 将堆积的消息转存到容量更大的mq集群

  • 增加多个消费者节点并行消费堆积消息

  • 消费完毕后,回复原始架构

 

9、消息过期怎么处理?

消息过期的原因

给消息设置了过期时间,如果超时还未被消费,则视为消息过期。过期消息可以转存到死信队列。

 

 

消息过期的处理方案

  • 过期消息进入到死信队列

  • 启动专门的消费者消费死信队列消息,并写入数据库记录日志

  • 查询数据库消息日志,重新发送消息到mq


http://chatgpt.dhexx.cn/article/5j5u3xn5.shtml

相关文章

RabbitMQ消息队列相关的面试题汇总

RabbitMQ面试题 1. rabbitmq 的使用场景有哪些? ①. 跨系统的异步通信: 所有需要异步交互的地方都可以使用消息队列. ②. 多个应用之间的解耦: 由于消息队列是平台无关和语言无关的,而且语义上也不再是函数调用,因此适合作为多个应用之间的松耦合的接口. ③. 应用内的同步变…

队列及其经典面试题

前言 上一篇讲了栈和栈的经典面试题,链接如下: 栈与栈的经典面试题 其实栈和队列是一码事,都是对只能再线性表的一端进行插入和删除。 因此,其实栈和队列可以互相转换! 一、队列的特点 先进先出的数据结构&#…

消息队列面试经典十连问

前言 金三银四即将来临,整理了十道十分经典的消息队列面试题,看完肯定对面试有帮助的,大家一起加油哈~ 什么是消息队列消息队列的应用场景消息队列如何解决消息丢失问题消息队列如何保证消息的顺序性。消息有可能发生重复消费吗&#xff1f…

一些常见的消息队列面试题整理

你们公司生产环境用的是什么消息中间件? RabbitMQ、ActiveMQ、RocketMQ、Kafka优缺点与应用场景 为什么在你们系统架构中要引入消息中间件? 系统解耦、异步调用、流量削峰 说说系统架构引入消息中间件有什么缺点? 系统可用性降低(MQ挂了)、…

Java笔试面试-消息队列面试题总结

1.消息队列的应用场景有哪些? 答:消息队列的应用场景如下。 应用解耦,比如,用户下单后,订单系统需要通知库存系统,假如库存系统无法访问,则订单减库存将失败,从而导致订单失败。订…

Java面试题消息队列

消息队列的架构图: 生产者发送消息的流程: -- 消息的发送者(Producer)和RabbitMQ建立连接,获取通道. -- 生产者发送消息到指定虚拟机中的交换机(exchange), -- 交换机通过routhingKey来获取对应的队列. 消费者消费消息的流程: -- 消息的消费者(Consummer)和RabbitMQ建…

消息队列常见面试题

文章目录 2. 消息队列2.1 MQ有什么用?2.2 说一说生产者与消费者模式2.3 消息队列如何保证顺序消费?2.4 消息队列如何保证消息不丢?2.5 消息队列如何保证不重复消费?2.6 MQ处理消息失败了怎么办?2.7 请介绍消息队列推和…

MQ消息队列面试题

MQ消息队列面试题 什么是消息队列 消息队列,就是指保存消息的一个容器。类似于数据库、缓存等,用来保存数据的。 消息队列,就是一个使用队列来通信的组件 为什么需要消息队列,消息队列的应用场景 提供系统性能首先考虑的是数据库…

常见消息队列面试题

常见消息队列面试题 1.为什么要用消息队列?(消息队列的应用场景?) 消息队列的本质? 消息队列是一种“先进先出”的数据结构,一般用其作为数据的传递 常见的应用场景:解耦,异步以及削峰 解耦: 场景:双11是…

消息队列 面试题

1、面试题 为什么使用消息队列啊?消息队列有什么优点和缺点啊?kafka、activemq、rabbitmq、rocketmq都有什么区别以及适合哪些场景? 2、面试官心理分析 其实面试官主要是想看看: (1)第一,你…

消息队列面试题及答案

1、为什么使用消息队列? 消息队列使用的场景和中间件有很多,但解决的核心问题主要是:异步、解耦、消峰填谷。 2、消息队列的优缺点 异步、解耦、消峰填谷这是消息队列最大的优点,除了这些消息队列还可以会解决一些我们特殊业务…

精心整理14道高频消息队列场景面试题(建议收藏)

消息队列是大型系统中常用的一个组件,也是项目的亮点和面试的重点。常见的的分布式系统中有RabbitMQ、ActiveMQ、RocketMQ等,而在大数据项目中比较常用的是Kafka。今天我整理了几道在面试中常见的消息队列面试题,供大家学习参考。 1、消息队列…

消息队列面试题(2022最新整理)

为什么要使用消息队列? 总结一下,主要三点原因:解耦、异步、削峰。 1、解耦。比如,用户下单后,订单系统需要通知库存系统,假如库存系统无法访问,则订单减库存将失败,从而导致订单操…

浙大Python 第2章-9 比较大小 (10 分)

专题博客链接 [题解]浙大Python PTA课后习题博客记录(Python) 原题题目 代码实现(输出法1) a,b,c map(int,input().split()) temp [a,b,c] list.sort(temp) print("%d->%d->%d" % (temp[0],temp[1],temp[2]))代码实现(输…

Anagrams by Stack | Python 实现

目录 1.题面 2.注意事项: 0.OJ平台 1.无限流输入 、EOF输入流 2.返回中的空格 3.AC代码 1.题面 Anagrams by Stack Time Limit: 2000 msMemory Limit: 65536 KB How can anagrams result from sequences of stack operations? There are two sequences of sta…

用Python统计字符串个数

1.题目 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 2.程序分析 利用while语句,条件为输入的字符不为’\n’. from pip._vendor.distlib.compat import raw_inputs raw_input(请输入字符串:\n) letters 0 space 0 digit 0 others …

PTA-MOOC《Python程序设计浙江大学》拼题题目集第一章编程题

7-1 从键盘输入两个数,求它们的和并输出 (30分) ****本题目要求读入2个整数A和B,然后输出它们的和。 输入格式: 在一行中给出一个被加数 在另一行中给出一个加数 输出格式: 在一行中输出和值。 输入样例: 在这里给出一组输入。例如: 输出样…

【Python】找出不是公共的元素

目录 找出不是公共的元素 代码思路仅供参考,欢迎大家批评指正! 找出不是公共的元素 给定两行输入,每行代表一组元素。每行的元素间用空格分开。求两组中非公共的元素。 # By jurio. a[i for i in input().split()] b[i for i in input().spl…

【PTA】【Python】【拼题A 2022 跨年挑战赛】小孩子才做选择,大人全都要

阿汪面前有两只盲盒,每只盒子打开都有两种可能:或者装了 X 克狗粮,或者是一只容量为 Y 克的狗粮储蓄盒。如果是狗粮,阿汪可以快乐地吃掉;如果是空储蓄盒,那就倒霉了,阿汪必须想办法找到狗粮把这…

【PTA】【Python】【拼题A 2022 跨年挑战赛】太神奇了

“告诉大家一个神奇的消息,太神奇了:明年全世界所有的人都同岁,全部都等于2022。明年的日子很特别,大概每1000年才会有一次。明年你的周岁年龄你的出生年,每个人都是2022年。例如:你明年57加上1965年生的&a…