消息中间件之八股面试回答篇:一、问题概览+MQ的应用场景+RabbitMQ如何保证消息不丢失(生产者确认机制、持久化、消费者确认机制)+回答模板

问题概览

在这里插入图片描述
目前主流的消息队列技术(MQ技术)分为RabbitMQ和Kafka,其中深蓝色为只要是MQ,一般都会问到的问题。浅蓝色是针对RabbitMQ的特性的问题。蓝紫色为针对Kafka的特性的问题。

MQ的应用场景

MQ主要提供的功能为:异步 解耦 削峰 。
展开来讲就是

  • 异步发送(验证码、短信、邮件…)
  • MYSQL和Redis/ES之间的数据同步
  • 分布式事务
  • 削峰填谷

RabbitMQ如何保证消息不丢失

RabbitMQ的工作流程应该如下,其中每个环节都可能导致消息丢失。
在这里插入图片描述
publisher叫做发布者,也可叫做生产者。consumer叫做消费者。

生产者确认机制(解决消息未到达交换机或队列的问题)

生产者确认机制是用来确认生产者将消息发送给交换器,交换器传递给队列的过程中,消息是否成功投递的。发送确认分为两步,一是确认是否到达交换器,二是确认是否到达队列。
在这里插入图片描述
如果没有成功到达交换器,那么就会返回一个nack publish-confirm
如果没有成功到达队列,那么就会返回一个ack publish-return

那确认消息发送失败之后如何处理捏?
一般有以下三种做法:

  • 回调方法即时重发
  • 记录日志
  • 保存到数据库然后定时重发,成功发送后即刻删除表中的数据

持久化技术(解决消息在队列中丢失的问题)

MQ默认是内存存储消息,需要持久化。分为交换机持久化、队列持久化和消息持久化,都通过代码来完成。
在这里插入图片描述

消费者确认机制(解决消息未到达消费者的问题)

RabbitMQ支持消费者确认机制,即:消费者处理消息后可以向MQ发送ack回执,MQ收到ack回执后才会删除该消息。而SpringAMQP则允许配置三种确认模式:

  1. manual:手动ack,需要在业务代码结束后,调用api发送ack。
  2. auto:自动ack,由spring监测listener代码是否出现异常,没有异常则返回ack;抛出异常则返回nack
  3. none:关闭ack,MQ假定消费者获取消息后会成功处理,因此消息投递后立即被删除。
    在实际生产场景中使用的是auto模式。
    如果确认消息丢失了怎么办捏?
    我们可以利用Spring的retry机制,在消费者出现异常时利用本地重试,设置重试次数,当次数达到了以后,如果消息依然失败,将消息投递到异常交换机,交由人工处理。

常见问题和回答模板

RabbitMQ如何保证消息不丢失?

回答:(背熟以下回答大概用时2min)

RabbitMQ分别提供了三个机制,第一个是生产者确认机制,用来保证消息成功到达交换机,且成功到达队列。第二个是持久化机制,用来保证消息不在队列中丢失。第三个是消费者确认机制,用来保证消息成功到达消费者。通过以上三种机制可以综合保证消息不丢失。

首先是生产者确认机制,如果消息未能成功到达交换机,那么就返回nack publish-confirm,如果消息未能成功到达队列,那么就返回ack publish-return。通过返回的信号不同,我们可以判断具体是哪个环节出了问题并采取对应手段,譬如:用回调方法即使重发或者保存到数据库然后定时重发等。

然后是持久化机制,因为MQ是基于内存的存储,所以我们需要持久化来保证消息不会在队列中丢失。我们一共需要持久化三部分,分别是交换机、队列和消息本身,都是通过代码完成的。

最后是消费者确认机制,只有消费者接受到消息并返回ack信号后,RabbitMQ才会删除该消息。框架一般支持自动确认、手动确认和不确认三种模式。我们一般选的都是自动确认。如果确认发现消息在这个环节丢失,那么也会有相应的retry机制。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Database history tablesupgraded

zabbix升级到6之后,配置安装完成会有一个红色输出,但是不影响zabbix使用,出于强迫症,找到了该问题的解决方法。 Database history tables upgraded: No. Support for the old numeric type is deprecated. Please upgrade to nume…

【新课上架】安装部署系列Ⅲ—Oracle 19c Data Guard部署之两节点RAC部署实战

01 课程介绍 Oracle Real Application Clusters (RAC) 是一种跨多个节点分布数据库的企业级解决方案。它使组织能够通过实现容错和负载平衡来提高可用性和可扩展性,同时提高性能。本课程基于当前主流版本Oracle 19cOEL7.9解析如何搭建2节点RAC对1节点单机的DATA GU…

LLM之RAG实战(二十一)| 使用LlamaIndex的Text2SQL和RAG的功能分析产品评论

亚马逊和沃尔玛等电子商务平台上每天都有大量的产品评论,这些评论是反映消费者对产品情绪的关键接触点。但是,企业如何从庞大的数据库获得有意义的见解? 我们可以使用LlamaIndex将SQL与RAG(Retrieval Augmented Generation&#x…

中国县域统计年鉴,含县市卷和乡镇卷,时间覆盖2001-2022年

数据名称: 中国县域统计年鉴 数据格式: pdf、xls不定 数据时间: 2001-2022年 数据几何类型: 文本 数据坐标系: —— 数据来源:国家统计局 数据字段: 中国县域统计年鉴(县市卷)中国县域统计年鉴(乡镇卷)目录…

Unity - 将项目转为HDRP

Camera window -> Package Manager 之后会出现HDRP向导窗口,均点击修复。 在Edit中,更改项目中的材质

科技发展趋势,墨水屏电子桌牌将发挥更重要作用

随着科技的不断发展,电子桌牌作为信息展示和宣传的新型设备,逐渐在各个行业得到广泛应用。在国企单位、政府部门、大企业、外企等,墨水屏电子桌牌作为一种新型的数字化展示工具,也已经得到了越来越多的应用。下面,中科…

【Leetcode】2865. 美丽塔 I

文章目录 题目思路代码结果 题目 题目链接 给你一个长度为 n 下标从 0 开始的整数数组 maxHeights 。 你的任务是在坐标轴上建 n 座塔。第 i 座塔的下标为 i &#xff0c;高度为 heights[i] 。 如果以下条件满足&#xff0c;我们称这些塔是 美丽 的&#xff1a; 1 < hei…

【前端web入门第一天】02 HTML图片标签 超链接标签

文章目录: 1.HTML图片标签 1.1 图像标签-基本使用1.2 图像标签-属性1.3 路径 1.3.1 相对路径 1.3.2 绝对路径 2.超链接标签 3.音频标签 4.视频标签 1.HTML图片标签 1.1 图像标签-基本使用 作用:在网页中插入图片。 <img src"图片的URL">src用于指定图像…

支持向量机(SVM)详解

支持向量机&#xff08;support vector machines&#xff0c;SVM&#xff09;是一种二分类模型。它的基本模型是定义在特征空间上的间隔最大的线性分类器&#xff0c;间隔最大使它有别于感知机。 1、线性可分支持向量机与硬间隔最大化 1.1、线性可分支持向量机 考虑一个二分…

读懂【浅拷贝】

1、对象直接赋值 先来看一下&#xff0c;创建一个对象obj&#xff08;原对象&#xff09;&#xff0c;将对象obj直接赋值给另一个对象o&#xff08;新对象&#xff09;,修改新对象o中的属性值&#xff0c;会发生什么&#xff1f;-----原来的对象obj内容也被改掉了。 const ob…

BurpSuite高阶使用指南

BurpSuite高阶使用指南 1.代理过滤 HTTP 历史记录设置模式Bambdas 过滤2.Intruder模块载荷的处理3.Intruder资源池的使用1.代理过滤 HTTP 历史记录 可以筛选 HTTP 历史记录,使其更易于分析 交互列表上方的筛选器栏描述当前显示筛选器。要进行配置,请单击过滤器栏以打开“配…

C#,最小生成树(MST)博鲁夫卡(Boruvka)算法的源代码

Otakar Boruvka 本文给出Boruvka算法的C#实现源代码。 Boruvka算法用于查找边加权图的最小生成树&#xff08;MST&#xff09;&#xff0c;它早于Prim和Kruskal的算法&#xff0c;但仍然可以被认为是两者的关联。 一、Boruvka算法的历史 1926年&#xff0c;奥塔卡博鲁夫卡&…

【算法Hot100系列】不同路径

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

基于springboot+vue的师生健康信息管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 研究背景…

使用CSS 或 SASS 实现主题背景切换效果

目录 &#x1f389;应用背景 &#x1f389;分析实现思路 &#x1f389;CSS实现主题切换 &#x1f389;SCSS实现主题切换 &#x1f389;结语 &#x1f389;应用背景 现在的主流网站中&#xff0c;无论是一些技术文档获取官网&#xff0c;都存在着使用一个switch按钮实现主题…

考研C语言刷题基础篇之数组(一)

目录 第一题&#xff1a;用数组作为参数实现冒泡排序 不用函数的冒泡排序 冒泡排序原理&#xff1a; 错误的数值传参冒泡排序 错误的原因 就是什么是数组名 正确的数组传参的冒泡排序 数组的地址和数组首元素的地址的区别 第一题&#xff1a;用数组作为参数实现冒泡排…

unity36——原神等手游常用的物理bone(弹簧)裙摆,与Cloth(布料)裙摆插件 Magica Cloth 使用教程(一)

目前我们手游开发&#xff0c;经常会遇到头发&#xff0c;双马尾&#xff0c;长裙&#xff0c;飘带等。以前我们都是在三维软件中制作骨骼后&#xff0c;自己手动K针。这样做有一些弊端&#xff0c;时间长&#xff0c;并且K帧的飘带效果没法随着游戏中角色的移动&#xff0c;旋…

DSP-TMS320F2837x学习---X-BAR

X-BAR主要包括三部分&#xff1a;输入X-BAR、输出X-BAR、ePWM X-BAR、CLB-XBAR&#xff08;注&#xff1a;28377D及以下不含有CLB模块&#xff09; 一、输入X-BAR 输入X-BAR可以访问每个GPIO&#xff0c;送到不同IP模块&#xff0c;例如ADC、ePWM、外部中断等。 注意&#xf…

深度学习剖根问底: Adam优化算法的由来

在调整模型更新权重和偏差参数的方式时&#xff0c;你是否考虑过哪种优化算法能使模型产生更好且更快的效果&#xff1f;应该用梯度下降&#xff0c;随机梯度下降&#xff0c;还是Adam方法&#xff1f; 这篇文章介绍了不同优化算法之间的主要区别&#xff0c;以及如何选择最佳…

搬运5款超级好用的效率软件

​ 今天再来推荐5个超级好用的效率软件&#xff0c;无论是对你的学习还是办公都能有所帮助&#xff0c;每个都堪称神器中的神器&#xff0c;用完后觉得不好用你找我。 1.绘图软件——Krita ​ Krita是一款专业的开源绘图软件&#xff0c;适用于数字绘画、动画、漫画、插画等领…