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

面试-RabbitMQ常见面试问题

1.什么是RabbitMQ?

RabbitMQ是一款基于AMQP协议的消息中间件,消费方并不需要确保提供方的存在,实现服务之间的高度解耦。

基本组成有:

  • Queue:消息队列,存储消息,消息送达队列后转发给指定的消费方
  • Exchange:消息队列交换机,按一定规则将消息路由转发到某一个队列中,对消息进行过滤
  • 消费者
  • 生产者

2.如何确保消息正确发送到MQ?

将信道设置为confirm模式(发送方确认模式),则所有在信道上发布的消息都会被指派一个唯一的ID,当消息被投递到队列或者写入磁盘后,信道会发送确认给生产者。如果说MQ内部发生了错误导致消息丢失,会发送一条nack消息,发送方确认模式是异步的,生产方在等待确认的同时是可以继续发送消息,当确认消息到达后,就会触发生产方的回调方法,来处理确认消息。

3.如何确保消息接收方消费了消息?

接收方确认机制,消费者在声明队列的时候,指定参数noAck,当noAck参数设置为false 时,消费者接收每一条消息后都必须进行确认,RabbitMq会等待消费者显式发回ack信息号才从内存或者磁盘中移除队列。RabbitMQ不会为ack设置超时时间,是以消费者的连接是否断开来判断,如果在ack返回前断开连接,MQ就会重新将消息发送给下一个消费者。

4.如何处理消息堆积?

如果已经产生了大量的消息堆积,首先要排查问题产生的原因,是消费端的网络故障还是消费端过少处理不过来等原因。找到问题后快速解决掉消费端的故障使其恢复消费能力,如果是因为消费端过少,消费能力不足,先通过临时的紧急扩容,然后建立一个临时的topic,建立好比原先多N倍的queue,再写一个临时分发的消费者,去消费积压的消息,消费后不做其他耗时的处理,直接轮询写入新建的queue中,再扩容N倍正常业务消费者去消费掉这些消息,等处理结束后再恢复原来的部署架构。

5.如何处理重复消息?

主要保证业务的幂等性,再修改数据时考虑乐观锁或悲观锁操作。如update t_account set amount = amount+1 where id =1,可以update 的条件上加入乐观锁,如:update t_account set amount = amount+1 where id =1 and amount = 10;
这样就能保证update 只会成功执行一次。

6.如何确保发送的消息不丢失?

生产者丢失:解决方案:开启confir模式,当收到MQ发送回来的ack后就说明发送成功,如果收到MQ返回的nack则重发消息,否则超过一段时间后也可以重发消息。
MQ丢失:开启持久化到磁盘,当接收到消息时,持久化到磁盘中
,发送方需要设置deliveryMode=2完全持久化到磁盘上。
消费者丢失:关闭MQ默认的ack机制,手动调用ack,确保业务完成后再进行ack。

相关文章:

面试-RabbitMQ常见面试问题

1.什么是RabbitMQ? RabbitMQ是一款基于AMQP协议的消息中间件,消费方并不需要确保提供方的存在,实现服务之间的高度解耦。 基本组成有: Queue:消息队列,存储消息,消息送达队列后转发给指定的消费方Exchange:消息队列交…...

使用VBA在单元格中快速插入Unicode符号

Unicode 符号 Unicode 符号在实际工作中有着广泛的应用,比如用于制作邮件签名、文章排版、演示文稿制作等等。在 Excel 表格中,插入符号可以让表格的排版更加美观,同时也能够帮助用户更清晰地表达意思。 Dingbats Dingbats是一个包含装饰符…...

PyTorch 深度学习 || 专题六:PyTorch 数据的准备

PyTorch 数据的准备 1. 生成数据的准备工作 import torch import torch.utils.data as Data#准备建模数据 x torch.unsqueeze(torch.linspace(-1, 1, 500), dim1) # 生成列向量 y x.pow(3) # yx^3#设置超参数 batch_size 15 # 分块大小 torch.manual_seed(10) # 设置种子点…...

迅为RK3568开发板2800页手册+220集视频

iTOP-3568开发板采用瑞芯微RK3568处理器,内部集成了四核64位Cortex-A55处理器。主频高达2.0Ghz,RK809动态调频。集成了双核心架构GPU,ARM G52 2EE、支持OpenGLES1.1/2.0/3.2OpenCL2.0、Vulkan 1.1、内高性能2D加速硬件。 内置NPU 内置独立NP…...

模拟电子 | 稳压管及其应用

模拟电子 | 稳压管及其应用 稳压二极管工作在反向击穿状态时,其两端的电压是基本不变的。利用这一性质,在电路里常用于构成稳压电路。 稳压二极管构成的稳压电路,虽然稳定度不很高,输出电流也较小,但却具有简单、经济实…...

使用大型语言模(LLM)构建系统(二):内容审核、预防Prompt注入

今天我学习了DeepLearning.AI的 Building Systems with LLM 的在线课程,我想和大家一起分享一下该门课程的一些主要内容。 下面是我们访问大型语言模(LLM)的主要代码: import openai#您的openai的api key openai.api_key YOUR-OPENAI-API-KEY def get_…...

springboot---mybatis操作事务配置的处理

目录 前言: 事务的相关问题 1、什么是事务? 2、事务的特点(ACID) 3、什么时候想到使用事务? 4、通常使用JDBC访问数据库,还是mybatis访问数据库,怎么处理事务? 5、问题中事务处…...

游戏盾是什么防御DDOS攻击的

游戏盾是一种专门用于防御分布式拒绝服务(DDoS)攻击的安全工具。DDoS攻击是指攻击者利用大量的计算机或设备同时向目标服务器发送海量的请求,以使目标服务器超负荷运行,无法正常提供服务。游戏盾通过一系列智能的防护措施&#xf…...

java快速结束嵌套循环

java快速结束嵌套循环 快速结束for循环 out:for (int i 0; i < 5; i) {in:for (int j 0; j < 5; j) {if (j 2) {break out;}System.out.println("i " i " j " j);}}解释 将外层for循环起别名 o u t \color{red}{out} out,将内层for循环起别名…...

chatgpt赋能python:Python屏蔽一段代码

Python屏蔽一段代码 在Python编程中&#xff0c;有时我们需要屏蔽一段代码以便于调试或者测试。在很多情况下&#xff0c;我们可能不想删除这段代码&#xff0c;因为需要在将来的某个时间再次使用它。为了解决这个问题&#xff0c;我们可以使用Python中的注释语句或者条件语句…...

项目跑不起来

Sa-Token/sa-token-core/src/main/java/cn/dev33/satoken/temp/SaTempUtil.java:10:8 java: 写入cn.dev33.satoken.temp.SaTempUtil时出错: Output directory is not specified 写入cn.dev33.satoken.temp.SaTempUtil时出错: Output directory is not specified 答案&#xf…...

黑马Redis视频教程高级篇(多级缓存案例导入说明)

目录 一、安装MYSQL 1.1、准备目录 1.2、运行命令 1.3、修改配置 1.4、重启 二、导入SQL 三、导入Demo工程 3.1、分页查询商品 3.2、新增商品 3.3、修改商品 3.4、修改库存 3.5、删除商品 3.6、根据id查询商品 3.7、根据id查询库存 3.8、启动 四、导入商品查询…...

2023系统分析师下午案例分析真题

真题1 阅读以下关于软件系统分析与建模的叙述&#xff0c;在纸上回答问题1至3. 说明: 某软件公司拟开发一套汽车租赁系统&#xff0c;科学安全和方便的管理租赁公司的各项业务&#xff0c;提高公司效率&#xff0c;提升利率。注册用户在使用系统镜像车辆预约时需执行以下操作…...

【Python练习】Matplotlib数据可视化

文章目录 一、实验目标二、实验内容1. 用画布的各种设置,绘制类似如图1所示的:y1=sin(x)和y2=cos(x)的曲线图2. 某校高一3班12名同学语数外三科成绩分布情况如表5-2所示,数据值也可以自拟,适当调整。绘制折线图、纵向条形图分析这些同学单科成绩情况,绘制纵向堆叠条形图查…...

【2611. 老鼠和奶酪】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 有两只老鼠和 n 块不同类型的奶酪&#xff0c;每块奶酪都只能被其中一只老鼠吃掉。 下标为 i 处的奶酪被吃掉的得分为&#xff1a; 如果第一只老鼠吃掉&#xff0c;则得分为 reward1[i] 。如果第二…...

Reid strong baseline 代码详解

本项目是对Reid strong baseline代码的详解。项目暂未加入目标检测部分&#xff0c;后期会不定时更新&#xff0c;请持续关注。 本相比Reid所用数据集为Markt1501&#xff0c;支持Resnet系列作为训练的baseline网络。训练采用表征学习度量学习的方式。 目录 训练参数 训练代…...

宝塔面板搭建网站教程:Linux下使用宝塔一键搭建网站,内网穿透发布公网上线

文章目录 前言1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4. 固定http地址5. 配置二级子域名6. 创建一个测试页面 转载自cpolar内网穿透的文章&#xff1a;使用宝塔面板快速搭建网站&#xff0c;并内网穿透实现公网远程访问 前言 宝塔面板作为简单好用的服务器运维管理面板&…...

常微分方程(ODE)求解方法总结

常微分&#xff08;ODE&#xff09;方程求解方法总结 1 常微分方程&#xff08;ODE&#xff09;介绍1.1 微分方程介绍和分类1.2 常微分方程的非计算机求解方法1.3 线性微分方程求解的推导过程 2 一阶常微分方程&#xff08;ODE&#xff09;求解方法2.1 欧拉方法2.1.1 欧拉方法2…...

【华为OD机试】区间交集【2023 B卷|200分】

【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述 给定一组闭区间,其中部分区间存在交集。 任意两个给定区间的交集,称为公共区间 (如:[1,2],[2,3]的公共区间为[2,2],[3,5],[3,6]的公共区间为[3,5])。 公共区间之间若存在交集,则需…...

Vue3 | Element Plus resetFields不生效

Vue3 | Element Plus resetFields不生效 1. 简介 先打开创建对话框没有问题&#xff0c;但只要先打开编辑对话框&#xff0c;后续在打开对话框就会有默认值&#xff0c;还无法使用resetFields()重置。 下面是用来复现问题的示例代码和示例GIF。 <script setup> import…...

SpringBoot+Vue员工绩效系统实战:从数据库设计到权限控制的完整避坑指南

SpringBootVue员工绩效系统实战&#xff1a;从数据库设计到权限控制的完整避坑指南 在数字化转型浪潮下&#xff0c;企业绩效管理系统正从传统的Excel表格升级为智能化平台。本文将带您从零构建一个具备多维度考核、动态权限控制和可视化分析的绩效系统&#xff0c;重点解决实际…...

从零搭建SRS流媒体服务器:实现RTMP推拉流的实战部署指南

1. 为什么选择SRS搭建流媒体服务器&#xff1f; 最近几年直播和实时视频的需求爆发式增长&#xff0c;很多开发者都在寻找轻量高效的流媒体服务器方案。我测试过不少开源方案&#xff0c;最终发现SRS&#xff08;Simple Realtime Server&#xff09;是最适合个人和小团队自建的…...

MarkDownload:让网页转Markdown变得简单高效的浏览器扩展

MarkDownload&#xff1a;让网页转Markdown变得简单高效的浏览器扩展 【免费下载链接】markdownload A Firefox and Google Chrome extension to clip websites and download them into a readable markdown file. 项目地址: https://gitcode.com/gh_mirrors/ma/markdownload…...

SubtitleOCR:重新定义视频内容处理效率的硬字幕提取革命

SubtitleOCR&#xff1a;重新定义视频内容处理效率的硬字幕提取革命 【免费下载链接】SubtitleOCR 快如闪电的硬字幕提取工具。仅需苹果M1芯片或英伟达3060显卡即可达到10倍速提取。A very fast tool for video hardcode subtitle extraction 项目地址: https://gitcode.com/…...

【AI微实验】这就deepseek对音频处理的理解╮(╯▽╰)╭

【手把手】零基础用PythonLibrosa搞定古琴音高识别&#xff0c;附完整代码1. 为什么要用代码“听”古琴&#xff1f;——传统音乐数字化的第一关1.1 从“泠泠七弦上”到“0和1”&#xff1a;音乐信息检索的价值1.2 核心任务拆解&#xff1a;基频&#xff08;F0&#xff09;是什…...

Repomix Git日志集成:掌握commit历史分析的终极指南

Repomix Git日志集成&#xff1a;掌握commit历史分析的终极指南 【免费下载链接】repomix &#x1f4e6; Repomix (formerly Repopack) is a powerful tool that packs your entire repository into a single, AI-friendly file. Perfect for when you need to feed your codeb…...

python-flask-djangol框架的食品仓库管理系统

目录需求分析与功能规划技术栈选择系统架构设计开发与测试流程安全与性能优化部署方案项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作需求分析与功能规划 明确食品仓库管理系统的核心需求&#xff0c;包括库存管理、食品分类、…...

AutoGen多智能体框架:从协作价值到企业级实践指南

AutoGen多智能体框架&#xff1a;从协作价值到企业级实践指南 【免费下载链接】autogen 启用下一代大型语言模型应用 项目地址: https://gitcode.com/GitHub_Trending/au/autogen 在人工智能快速发展的今天&#xff0c;如何让AI系统像人类团队一样高效协作完成复杂任务&…...

Beekeeper Studio:现代跨平台数据库管理工具的技术架构与实战应用

Beekeeper Studio&#xff1a;现代跨平台数据库管理工具的技术架构与实战应用 【免费下载链接】beekeeper-studio beekeeper-studio/beekeeper-studio: Beekeeper Studio 是一款开源的跨平台数据库客户端工具&#xff0c;支持多种数据库&#xff08;如MySQL, PostgreSQL, SQLit…...

Excel双坐标折线图保姆级教程:用散点图搞定多组数据对比(附详细步骤图)

Excel双坐标折线图进阶指南&#xff1a;用散点图实现精准数据可视化 在数据分析的日常工作中&#xff0c;我们经常遇到需要同时展示两组量纲差异巨大的数据——比如销售额&#xff08;百万级&#xff09;和增长率&#xff08;百分比&#xff09;。传统的双坐标折线图虽然能解决…...