Rabbit MQ 高频面试题【刷题系列】
文章目录
- 一、公司生产环境用的什么消息中间件?
- 二、Kafka、ActiveMQ、RabbitMQ、RocketMQ有什么优缺点?
- 三、解耦、异步、削峰是什么?
- 四、消息队列有什么缺点?
- 五、RabbitMQ一般用在什么场景?
- 六、简单说RabbitMQ有哪些角色?
- 七、RabbitMQ有几种工作模式?
- 八、如何保证RabbitMQ消息的顺序性?
- 九、消息怎么路由?
- 十、如何保证消息不被重复消费?
- 十一、如何确保消息接收方消费了消息?
- 十二、如何保证RabbitMQ消息的可靠传输?
- 十三、为什么不应该对所有的message都使用持久化机制?
- 十四、如何保证RabbitMQ高可用的?
- 十五、如何解决消息队列的延时以及过期失效问题?
- 十六、RabbitMQ中消息可能有的几种状态?
- 十七、什么是死信队列?
- 十八、导致的死信的几种原因?

一、公司生产环境用的什么消息中间件?
解答:公司生产环境使用的消息中间件是 RabbitMQ ,它是一个开源的消息代理软件,支持多种消息传递协议,具有高可用性、可扩展性和灵活的路由能力。
二、Kafka、ActiveMQ、RabbitMQ、RocketMQ有什么优缺点?
解答:
- ActiveMQ:优点是高并发、高吞吐、性能高,有完善的后台管理界面;缺点是社区活跃度不高,未经大规模吞吐量场景验证。
- RabbitMQ:优点是开源社区活跃,迭代频繁,适合互联网中小公司;缺点是基于Erlang开发,源码分析和定制较难。
- RocketMQ:优点是性能卓越,支持分布式事务,适合互联网公司大规模使用;缺点是社区可能存在不稳定风险。
- Kafka:优点是专为高吞吐量设计,适合大数据领域;缺点是功能较少,主要用于日志采集和实时计算场景。
三、解耦、异步、削峰是什么?
解答:
- 解耦:系统间通过消息队列通信,降低系统间的耦合度,提高系统的灵活性和可维护性。
- 异步:通过消息队列实现请求的异步处理,提高系统响应速度和吞吐量。
- 削峰:在高流量时段,使用消息队列缓存请求,平滑流量高峰,保护系统稳定性。
四、消息队列有什么缺点?
解答:消息队列的缺点包括:
- 系统可用性降低:消息队列故障可能导致整个系统受影响。
- 系统复杂度提高:需要处理消息一致性、避免重复消费等问题。
- 一致性问题:在分布式系统中,消息队列可能导致数据不一致性问题。
五、RabbitMQ一般用在什么场景?
解答:RabbitMQ 适用于需要高可靠性、灵活路由和多种消息模式的场景,如:
- 服务间异步通信。
- 顺序消费。
- 定时任务。
- 请求削峰。
六、简单说RabbitMQ有哪些角色?
解答:RabbitMQ 中的主要角色包括:
- Broker:消息队列服务器实体。
- Exchange:消息交换机,负责消息路由。
- Queue:消息队列载体,存储消息。
- Binding:绑定,连接
Exchange和Queue。 - Routing Key:路由关键字,用于消息路由。
- VHost:虚拟Broker,提供权限隔离。
- Producer:消息生产者。
- Consumer:消息消费者。
七、RabbitMQ有几种工作模式?
解答:RabbitMQ 有以下几种工作模式:
- Simple模式:最简单的消息收发模式。
- Work模式:多个消费者竞争同一队列中的消息。
- Publish/Subscribe模式:发布订阅模式,消息分发到所有订阅的队列。
- Routing模式:路由模式,根据路由键将消息发送到特定队列。
- Topic模式:主题模式,使用通配符进行模糊匹配消息路由。
八、如何保证RabbitMQ消息的顺序性?
解答:保证 RabbitMQ 消息顺序性的方法包括:
- 使用单个消费者监听单个队列。
- 将相关业务数据发送到同一个队列中。
- 在消费者内部实现有序处理逻辑。
九、消息怎么路由?
解答:消息路由通过 Exchange 完成,生产者将消息发送到 Exchange,Exchange 根据路由键将消息路由到一个或多个绑定的队列中。
十、如何保证消息不被重复消费?
解答:防止消息重复消费的方法包括:
- 使用消息的唯一ID进行去重。
- 利用
RabbitMQ的确认机制(ACK),确保消息被正确处理后才从队列中删除。 - 通过数据库或缓存(如
Redis)记录已处理消息的状态。
十一、如何确保消息接收方消费了消息?
解答:
确保消息被消费的方法是使用 RabbitMQ 的确认机制。消费者在处理完消息后发送确认回执给 RabbitMQ ,RabbitMQ 收到确认后才从队列中移除消息。
十二、如何保证RabbitMQ消息的可靠传输?
解答:
保证消息可靠传输的方法包括:
- 使用持久化消息和持久化队列。
- 开启发送方确认模式(
Confirm Mode)。 - 使用事务或发布确认。
- 在集群模式下使用镜像队列。
十三、为什么不应该对所有的message都使用持久化机制?
解答:
对所有消息使用持久化机制可能导致性能下降,因为磁盘 I/O 比内存操作慢。此外,持久化机制在某些情况下可能引起数据不一致问题,如集群节点故障时的消息丢失。
十四、如何保证RabbitMQ高可用的?
解答:
保证 RabbitMQ 高可用的方法包括:
- 使用镜像集群模式,消息和队列元数据在多个节点上同步。
- 合理配置
RabbitMQ的策略,如镜像队列同步策略。 - 监控和管理
RabbitMQ集群状态,及时发现并处理问题。
十五、如何解决消息队列的延时以及过期失效问题?
解答:
解决消息队列延时和过期失效问题的方法包括:
- 设置合理的
TTL(Time-To-Live)值,避免消息过期。 - 在消息积压时,临时增加消费者数量或资源,加快消息处理速度。
- 对于丢失的消息,通过数据重导或补偿机制恢复。
十六、RabbitMQ中消息可能有的几种状态?
解答:
abbitMQ中消息可能的状态包括:
- 已发送(Sent):消息已发送到
Exchange。 - 已确认(Confirmed):消息已被消费者确认。
- 已丢弃(Discarded):消息被消费者拒绝并不再重新入队。
- 已死信(Dead Letter):消息成为死信,可能因为
TTL过期或被拒绝。
十七、什么是死信队列?
解答:
死信队列是用于存储死信消息的队列。死信是指无法被正常消费的消息,如TTL过期、被拒绝且不重新入队的消息。
十八、导致的死信的几种原因?
解答:导致消息成为死信的原因包括:
- 消息TTL过期。
- 消息被消费者拒绝并且设置requeue=false。
- 队列达到最大长度,无法再添加新消息。
相关文章:
Rabbit MQ 高频面试题【刷题系列】
文章目录 一、公司生产环境用的什么消息中间件?二、Kafka、ActiveMQ、RabbitMQ、RocketMQ有什么优缺点?三、解耦、异步、削峰是什么?四、消息队列有什么缺点?五、RabbitMQ一般用在什么场景?六、简单说RabbitMQ有哪些角…...
ES6 特性全面解析与应用实践
1、let let 关键字用来声明变量,使用let 声明的变量有几个特点: 1) 不允许重复声明 2) 块儿级作用域 3) 不存在变量提升 4) 不影响作用域链 5) 暂时性死区 6)不与顶级对象挂钩 在代码块内,使用let命令声明变量之前&#x…...
有关数据库表的冗余字段
有关数据库表的冗余字段 之前看一个开发人员的技术研讨视频,提到了一个数据库表设计中的表拆分字段冗余问题,就是一张表做纵向分表,拆分为a和b以做冷热数据分离存储,但是会有一种情况就是相同的字段值在a,b表中重复出现…...
知识图谱补全KGC
目录 基础知识知识图谱补全概念性能指标 一、翻译模型的知识图谱补全1.TransE2.TransH3.RotatE 二、张量分解的知识补全1.RESCAL2.ComplEx 三、神经网络的知识图谱补全1.卷积神经网络CNN(一般用于二维图像处理)ConvE 2.循环神经网络RNN3.图神经网络GNN1&…...
独立开发者的内容营销教程
内容营销对于独立开发者来说,是一种低成本、高效的方式来推广产品、建立品牌影响力和吸引潜在用户。通过分享有价值、相关性强的内容,您可以吸引用户的注意力,增强用户黏性,并最终将他们转化为忠实用户或客户。以下是详细的独立开…...
Mysql——约束与多表查询
一、约束 1.1定义 约束是对表中的数据进行限制的一套规则,用于防止用户向数据库中输入无效数据。它可以保证表中的数据满足特定业务规则和逻辑,从而维护数据的准确性和可靠性。 1.2作用 数据完整性 :约束可以确保数据在插入、更新或删除时符…...
DockerでOracle Database 23ai FreeをセットアップしMAX_STRING_SIZEを拡張する手順
DockerでOracle Database 23c FreeをセットアップしMAX_STRING_SIZEを拡張する手順 はじめに環境準備ディレクトリ作成Dockerコンテナ起動 データベース設定変更コンテナ内でSQL*Plus起動PDB操作と文字列サイズ拡張設定検証 管理者ユーザー作成注意事項まとめ はじめに Oracle…...
Unity 运用正则表达式保留字符串中的中文英文字母和数字
正则表达 正则表达式 – 语法 | 菜鸟教程 Regex 类 (System.Text.RegularExpressions) | Microsoft Learn 保留字符串中的中英数 中英数的正则表达。 patten "[\u4e00-\u9fa5A-Za-z0-9]"; 使用Regex 类匹配正则并保留。 matches Regex.Matches(str, patten)…...
vue el-table-column 单元表格的 省略号 实现
要对 el-table-column 的某一列中的每个单元格值进行处理,使其在文本内容超出指定宽度时显示省略号(…),可以通过以下方法实现: 使用 scoped slots:利用 Element UI 提供的 scoped slots 自定义单元格内容…...
企业微信里可以使用的企业内刊制作工具,FLBOOK
如何让员工及时了解公司动态、行业资讯、学习专业知识,并有效沉淀企业文化?一份高质量的企业内刊是不可或缺的。现在让我来教你该怎么制作企业内刊吧 1.登录与上传 访问FLBOOK官网,注册账号后上传排版好的文档 2.选择模板 FLBOOK提供了丰富的…...
【数据挖掘】Pandas
Pandas 是 Python 进行 数据挖掘 和 数据分析 的核心库之一,提供了强大的 数据清洗、预处理、转换、分析 和 可视化 功能。它通常与 NumPy、Matplotlib、Seaborn、Scikit-Learn 等库结合使用,帮助构建高效的数据挖掘流程。 📌 1. 读取数据 P…...
explore与explode词源故事
英语单词explore来自古法语,源自拉丁语,由前缀ex-(出来)加词根plor-(叫喊)以及末尾的小尾巴-e组成,字面意思就是“喊出来,通过叫喊声赶出来”。它为什么能表示“探索”呢?…...
CAM350_安装
版本:V14.5 一、安装 打开.exe文件 选择不重启,然后再打开这个.exe 再来一次类似的操作 二、配置 复制patch文件夹中的这三个 ,粘贴到掉安装目录中 设置ACT_INC_LICENSE_FILE用户环境变量来设置license管理 打开电脑的环境变量 破解完毕&am…...
51c自动驾驶~合集22
我自己的原文哦~ https://blog.51cto.com/whaosoft/11870502 #自动驾驶数据闭环最前沿论文 近几年,自动驾驶技术的发展日新月异。从ECCV 2020的NeRF问世再到SIGGRAPH 2023的3DGS,三维重建走上了快速发展的道路!再到自动驾驶端到端技术的…...
games101 作业5
题目 光线追踪的核心算法: 1.光线的生成 2.光线与三角的相交 题解 1.光线的生成 如课件中的图所示: image plane 就是 代码中的scene的FrameBuffer。 但是,FrameBuffer 是窗口坐标系中,而光线是世界坐标系中的。所以我们需要将scene中的屏…...
【高并发秒杀系统设计:从Guava到Redis的6级缓存架构演进】
一、瞬时十万QPS场景分析 1.1 典型秒杀场景特征 public class SpikeScenario {// 特征1:瞬时流量突增private static final int QPS 100000; // 正常流量100倍// 特征2:资源竞争激烈private int stock 1000; // 100万人抢1000件商品// 特征3&#…...
2-程序语言基础知识
本节内容不是很多,在考试中一般是2-3分,多看教材,考试中大概都是原话 本节主要考点 1、编译程序和解释程序 2、程序语言的数据成分和控制成分(多看教材) 3、编译程序的过程(多看教材) 4、中缀、前缀与后缀表达式(增加) 教材P42-52,54-58多看一下 1、程序语言概述 机器…...
【AIGC系列】4:Stable Diffusion应用实践和代码分析
AIGC系列博文: 【AIGC系列】1:自编码器(AutoEncoder, AE) 【AIGC系列】2:DALLE 2模型介绍(内含扩散模型介绍) 【AIGC系列】3:Stable Diffusion模型原理介绍 【AIGC系列】4࿱…...
小米火龙CPU和其他几代温度太高的CPU是由谁代工的
小米火龙CPU”并非小米自研芯片,而是指搭载在小米手机上的部分高通骁龙处理器因发热问题被调侃为“火龙”。以下是几款被称为“火龙”的高通CPU及其代工情况: 骁龙810 骁龙810是高通历史上最著名的“火龙”之一,采用台积电20nm工艺代工。由于…...
在 ASP.NET Core 中压缩并减少图像的文件大小
示例代码:https://download.csdn.net/download/hefeng_aspnet/90294127 在当今的数字时代,图像是 Web 应用程序和用户体验不可或缺的一部分。但是,处理大型图像文件可能会导致网页加载缓慢和更高的存储费用。为了解决这个问题,在…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
