【消息队列】RabbitMQ 面试篇

news2024/9/29 19:24:47

🎗️ 主页:小夜时雨
🎗️专栏:消息队列
🎗️如何活着,是我找寻的方向

优雅

目录

  • 1. RabbitMQ 有哪些工作模式?
  • 2. 如何保证消息不丢失(可靠性)
  • 3. 什么是死信队列,如何导致的?
  • 4. 什么是延迟队列,RabbitMQ 如何实现延迟队列的

1. RabbitMQ 有哪些工作模式?

  1. work 工作模式(任务模型)
    区别于收发消息的简单模式,工作模式支持多个消费者绑定到一个队列中,共同去消费队列中的消息,处理消息的速度就会提高。

  2. 广播模式(Fanout 交换机)
    区别于work 模式, 多了一个交换机:只负责转发消息,不具有存储消息的能力。需要将队列与交换机进行绑定,将消息发送给所有绑定到交换机的队列

  3. 路由模式(direct 交换机)
    有的场景不需要发送给所有绑定的交换机,需要将不同的消息发送给不同的队列,路由模式就是绑定时候指定一个路由key,利用 key 将交换机和特定的队列进行绑定,那么发送方在发送消息到队列时也需要指定 key, 那么笑嘻就只会发送给特定 key的队列。

  4. 主题模式(topic 交换机)
    和路由模式一样,也需要指定一个路由key,只不过是多了通配符的支持。也就是路由 key 中可以有通配符,可以将消息发送给多个符合路由key通配符的队列

2. 如何保证消息不丢失(可靠性)

消息发送和接受涉及到三个角色:生产者,消费者和RabbitMQ 本身。

  1. 生产者:开启生产者确认机制,确保生产者的消息能到达队列,如果报错可以先记录到日志中,再去修复数据
  2. RabbitMQ 本身:开启持久化功能,确保消息未消费前在队列中不会丢失,其中的交换机、队列、和消息都要做持久化
  3. 消费者:开启消费者确认机制为auto,由spring确认消息处理成功后完成ack,当然也需要设置一定的重试次数,我们当时设置了3次,如果重试3次还没有收到消息,就将失败后的消息投递到异常交换机,交由人工处理。

3. 什么是死信队列,如何导致的?

当一个消息变成死信之后,就会被丢到一个特定的交换机中,这个交换机就是死信交换机,与死信交换机绑定的队列就是死信队列。

导致死信的原因:

  • 消息是一个过期消息,无人消费
  • 要投递的队列满了,无法投递,这个消息也会变成死信
  • 消费者使用basic.reject或 basic.nack声明消费失败,并且消息的requeue参数设置为false

4. 什么是延迟队列,RabbitMQ 如何实现延迟队列的

延迟队列指的是存储对应的延迟消息,消息被发送以后,并不想让消费者立刻拿到消息,而是等待特定时间后,消费者才能拿到这个消息进行消费

RabbitMQ 本身是没有延迟队列的,要实现延迟消息,一般有两种方式:

  1. 利用死信交换机和TTL(消息存活时间) 实现的。
    • 我们给发送消息的交换机绑定一个队列,但是不绑定消费者去消费消息,那么消息超时未消费就会变成死信。在RabbitMQ中如果消息成为死信。
    • 这个队列可以绑定一个死信交换机,在死信交换机上可以绑定其他队列,在我们发消息的时候可以按照需求指定TTL的时间,其他队列绑定好消费者去消费就可以了,这样就实现了延迟队列的功能了。(见下图更好理解)
      在这里插入图片描述
  2. 在RabbitMQ中安装一个死信插件,这样更方便一些,只需要在声明交互机的时候,指定这个就是死信交换机,然后在发送消息的时候直接指定超时时间就行了,相对于死信交换机+TTL要省略了一些步骤

后续我们会继续介绍一些 RabbitMQ 的常见问题。

🎗️🎗️🎗️ 好啦,有关 RabbitMQ 部分面试题的分享就到这里了,如果感觉做的还不错的话可以点个赞,关注一下,你的支持就是我继续下去的动力,我们下期再见,拜了个拜~ ☆*: .。. o(≧▽≦)o .。.:*☆

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1980261.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于K210智能人脸识别+车牌识别系统(完整工程资料源码)

运行效果: 基于K210的智能人脸与车牌识别系统工程 目录: 运行效果: 目录: 前言: 一、国内外研究现状与发展趋势 二、相关技术基础 2.1 人脸识别技术 2.2 车牌识别技术 三、智能小区门禁系统设计 3.1 系统设计方案 3.2 …

【网络编程】网络原理(一)

系列文章目录 1、 初识网络 2、网络编程的基础使用(一) 文章目录 系列文章目录前言一、端口号的使用二、UDP报文学习1.报文格式2.MD5算法 总结 前言 在前文中,主要对UDP和TCP协议有了简单的了解,而这两种协议是负责传输层的内容…

组件设计原则

state数据结构设计 用数据描述所有内容数据要结构化,易于程序操作(遍历、查找)数据要可扩展,以便增加新的功能 组件设计组件通讯 从功能上拆分层次尽量让组件原子化容器组件(只管理数据)& UI组件&am…

【MySQL】库操作,数据类型

目录 MySQL简介SQL语句分类库操作语句展示数据库创建数据库使用数据库删除数据库 数据类型整型浮点型字符串日期类型 MySQL简介 数据库有关系型数据库和非关系型数据库。 关系型数据库:是指采用了关系模型来组织数据的数据库。 简单来说,关系模型指的就…

科普文:JUC系列之ConcurrentLinkedQueue非阻塞队列用法

概叙 **Queue接口与List、Set同一级别,都是继承了Collection接口**。队列是一种数据结构.它有两个基本操作:在队列尾部加人一个元素,和从队列头部移除一个元素,队列以一种先进先出的方式管理数据。 队列分为两种&#…

pikachu漏洞平台~文件包含漏洞

在PHP程序中使用文件包含的对象可以被前端的用户控制且没有经过过滤或严格的定义,用户可以将其他的文件作为参数带入到PHP代码中解释执行,从而造成敏感信息泄露/程序文件读取/GetShell等危害的漏洞。 0x01文件包含漏洞 连接成功,完毕&#x…

聚焦IOC容器刷新环节postProcessBeanFactory(BeanFactory后置处理)专项

目录 一、IOC容器的刷新环节快速回顾 二、postProcessBeanFactory源码展示分析 (一)模版方法postProcessBeanFactory (二)AnnotationConfigServletWebServerApplicationContext 调用父类的 postProcessBeanFactory 包扫描 …

oracle(19c)用户管理

简介 本文介绍 Oracle 中的用户管理,包含以下内容: 概念介绍 系统用户 解锁 hr 用户 创建用户 用户相关案例 使用 Profile 管理用户口令 Oracle 的认证方式 重置管理员(sys)密码 1. 概念介绍 使用前可以自行安装oracle数据库 oracle19c安装&a…

【系统架构设计师】二十四、安全架构设计理论与实践④

目录 六、数据库系统的安全设计 6.1 数据库的完整性设计 6.1.1 数据库完整性设计原则 6.1.2 数据库完整性的作用 6.1.3 数据库完整性设计示例 七、系统架构的脆弱性分析 7.1 软件脆弱性的特点和分类 7.2 软件脆弱性的生命周期 7.2.1 脆弱性的引入阶段 7.2.2 产生破坏…

pythonflaskMYSQL自驾游搜索系统32127-计算机毕业设计项目选题推荐(附源码)

目 录 摘要 1 绪论 1.1研究背景 1.2爬虫技术 1.3flask框架介绍 2 1.4论文结构与章节安排 3 2 自驾游搜索系统分析 4 2.1 可行性分析 4 2.2 系统流程分析 4 2.2.1数据增加流程 5 2.3.2数据修改流程 5 2.3.3数据删除流程 5 2.3 系统功能分析 5 2.3.1 功能性分析 6 2.3.2 非功…

C++初阶学习——探索STL奥秘——模拟实现string类

1、string类的构造 上面的代码从表面看没什么问题,但是运行后会发现程序有多处bug 但是如上图一样,这样改进依然有bug 因为我们编写无参构造函数的时候,肯定要让_str默认为nullptr,但是这样的话,在main函数中创建对象…

使用npm全局安装typescript

查看npm安装 npm -v 安装typescript npm i -g typescript 查看安装 tsc 这就是标致着安装完成。

uBlock Origin很快将无法在Chrome上使用 开发者发布情况说明

Chrome v127 版开始扩展程序页面将自动显示即将不再支持的扩展程序,包括知名的广告拦截扩展程序 uBlock Origin 也在谷歌的警告列表中。昨天 uBO 团队发布新的支持文档对目前的情况进行说明,简单来说就是 Chrome 将不再支持基于 Manifest v2 开发的扩展程…

【设计模式入门】设计模式全解析:23种经典模式介绍与评级指南(设计师必备)

文章目录 设计模式简介引言七项基本原则创建型模式单例模式(Singleton)工厂方法模式(Factory Method)抽象工厂模式(Abstract Factory)建造者模式(Builder)原型模式(Proto…

文件夹图标变白色无法打开:高效数据恢复指南

在日常使用电脑的过程中,我们可能会遇到一种令人困扰的情况——文件夹图标突然变成白色且无法正常打开。这一现象不仅影响了文件管理的便捷性,还可能意味着重要数据的丢失风险。本文将深入探讨这一现象的原因,并提供一种专业且高效的数据恢复…

一二三应用开发平台应用开发示例(11)——收藏夹功能高代码改造及总结

背景 前面使用低代码配置,把实体配置、库表和模式化的代码生成出来了,实际上是用平台帮忙开发人员把“体力活”给干了。接下来,就需要在此基础上进行个性化逻辑的开发。 文档收藏 完善实体模型 文档收藏夹我们原先配置了三个关键属性&…

【Mind+】掌控板入门教程04 迷你动画片

还记得小时候每天放学必看的动画片吗?还记得那些年陪伴我一起长大的卡通人物吗?勇救爷爷的葫芦娃,我们的朋友小哪吒,相信这些经典的动画形象已经成为了一代人童年的美好回忆。今天就让我们用掌控板来制作一部迷你动画片吧。 项目示…

stm32入门学习10-I2C和陀螺仪模块

(一)I2C通信 (1)通信方式 I2C是一种同步半双工的通信方式,同步指的是通信双方时钟为一个时钟,半双工指的是在同一时间只能进行接收数据或发送数据,其有一条时钟线(SCL)…

代码随想录——买卖股票的最佳时机 IV(Leetcode 188)

题目链接 动态规划 class Solution {public int maxProfit(int k, int[] prices) {int[][] dp new int[prices.length][2 * k 1];// 初始化for(int i 1; i < 2 * k 1; i i 2){dp[0][i] -prices[0];}// dp更新寻找最大利润for(int i 1; i < prices.length; i){…

使用Halcon变换与校正图像

使用Halcon变换与校正图像 文章目录 使用Halcon变换与校正图像1. 二维图像的平移、旋转和缩放1.图像的平移2.图像的旋转3.图像的缩放2. 图像的仿射变换3. 投影变换4 实例&#xff1a;透视形变图像校正 由于相机拍摄的时候可能存在角度偏差&#xff0c;因此实际获得的画面可能会…