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 应用程序和用户体验不可或缺的一部分。但是,处理大型图像文件可能会导致网页加载缓慢和更高的存储费用。为了解决这个问题,在…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
鸿蒙(HarmonyOS5)实现跳一跳小游戏
下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...
