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 应用程序和用户体验不可或缺的一部分。但是,处理大型图像文件可能会导致网页加载缓慢和更高的存储费用。为了解决这个问题,在…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...

SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...

人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...