当前位置: 首页 > news >正文

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:绑定,连接 ExchangeQueue
  • Routing Key:路由关键字,用于消息路由。
  • VHost:虚拟Broker,提供权限隔离。
  • Producer:消息生产者。
  • Consumer:消息消费者。

七、RabbitMQ有几种工作模式?

解答:RabbitMQ 有以下几种工作模式:

  • Simple模式:最简单的消息收发模式。
  • Work模式:多个消费者竞争同一队列中的消息。
  • Publish/Subscribe模式:发布订阅模式,消息分发到所有订阅的队列。
  • Routing模式:路由模式,根据路由键将消息发送到特定队列。
  • Topic模式:主题模式,使用通配符进行模糊匹配消息路由。

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

解答:保证 RabbitMQ 消息顺序性的方法包括:

  • 使用单个消费者监听单个队列。
  • 将相关业务数据发送到同一个队列中。
  • 在消费者内部实现有序处理逻辑。

九、消息怎么路由?

解答:消息路由通过 Exchange 完成,生产者将消息发送到 ExchangeExchange 根据路由键将消息路由到一个或多个绑定的队列中。

十、如何保证消息不被重复消费?

解答:防止消息重复消费的方法包括:

  • 使用消息的唯一ID进行去重。
  • 利用 RabbitMQ 的确认机制( ACK ),确保消息被正确处理后才从队列中删除。
  • 通过数据库或缓存(如 Redis )记录已处理消息的状态。

十一、如何确保消息接收方消费了消息?

解答:
确保消息被消费的方法是使用 RabbitMQ 的确认机制。消费者在处理完消息后发送确认回执给 RabbitMQRabbitMQ 收到确认后才从队列中移除消息。

十二、如何保证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组成,字面意思就是“喊出来,通过叫喊声赶出来”。它为什么能表示“探索”呢&#xff1f…...

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&#xff1…...

小米火龙CPU和其他几代温度太高的CPU是由谁代工的

小米火龙CPU”并非小米自研芯片,而是指搭载在小米手机上的部分高通骁龙处理器因发热问题被调侃为“火龙”。以下是几款被称为“火龙”的高通CPU及其代工情况: 骁龙810 骁龙810是高通历史上最著名的“火龙”之一,采用台积电20nm工艺代工。由于…...

在 ASP.NET Core 中压缩并减少图像的文件大小

示例代码:https://download.csdn.net/download/hefeng_aspnet/90294127 在当今的数字时代,图像是 Web 应用程序和用户体验不可或缺的一部分。但是,处理大型图像文件可能会导致网页加载缓慢和更高的存储费用。为了解决这个问题,在…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言:多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...

<6>-MySQL表的增删查改

目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表&#xf…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...

WebRTC从入门到实践 - 零基础教程

WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...

HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散

前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为&#xff0c…...

离线语音识别方案分析

随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...