MQ相关面试题

文章目录

            • 你们项目中哪些地方有使用到 MQ ?
            • 为什么需要使用 MQ?
            • MQ 如何避免消息堆积的问题?
            • MQ 宕机了消息是否会丢失呢?
            • 生产者投递消息,MQ 宕机了如何处理?
            • MQ 如何保证消息顺序一致性问题?
            • 为什么保证了消息顺序一致性有可能降低我们消费者消费的速率?解决方案
            • MQ 如何保证消息幂等问题?

你们项目中哪些地方有使用到 MQ ?
  1. 使用 MQ 异步发送优惠券;
  2. 使用 MQ 异步发送通知(短信、邮件);
  3. 使用 MQ 异步扣库存
  4. 使用MQ异步审核贷款金额
  5. 使用MQ异步第三方接口(中国公民信息网)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

为什么需要使用 MQ?

1.异步处理(多线程和 MQ)
2.实现解耦
3.流量削峰(MQ 可以实现抗高并发)

可以按场景简述,录单流程:用户手机端填写录单流程,服务端接收到请求信息后,存储数据库,响应客户录单成功,然后写一条消息到MQ中,具体生成整张保单信息的耗时处理,报单中心模块监听MQ信息进行处理,最后,给客户发送保单成功短信通知。

解耦:客户端请求到服务端,用户信息写入落库,主线程响应客户端,另起一个子线程发送MQ系统,耗时操作,让具体的业务系统慢慢处理。当采用多线程时,主线程和子线程都在同一个服务器上,当服务器当即后,一些操作就无法完成;当使用MQ时,具体业务耗时逻辑的操作有另一个服务器负责去完成,二者没有关联,当前这宕机后后者无影响。

流量削峰:

背景:客户端50个请求到服务端tomcat,而tomcat内部线程容量是有限制的,比如说同时处理只能处理50个任务,当其他任务进行来时,会缓存对队列中,当处理的请求越来越多就会阻塞线程或者内存溢出。

处理方案:客户端50个请求到服务端tomcat,而tomcat不做具体耗时逻辑处理,信息落库后,直接响应客户端,然后发一条消息到业务系统的MQ中就可以了。
MQ 与多线程实现异步的区别?

1.多线程方式实现异步可能会消耗到我们的 CPU资源,可能会影响到我们业务线程执行 会发生 CPU竞争的问题,例如:单核多线程,cpu上下文切换,会出现卡顿现象
2.MQ 方式实现异步是完全解耦,适合于大型互联网项目;
3.小的项目可以使用多线程实现异步,大项目建议使用 MQ 实现异步;

在这里插入图片描述

MQ 如何避免消息堆积的问题?

1.提高消费者消费的速率;(对我们的消费者实现集群)
2.消费者应该批量形式获取消息 减少网络传输的次数;

说明:同一个组中多个消费者不会重复消费同一条消息。(均摊策略等等)

理解:

1.产生背景: 生产者投递消息的速率与我们消费者消费的速率完全不匹配。

2.生产者投递消息的速率>消费者消费的速率 导致我们消息会堆积在我们 MQ 服务器端中,没有及时的被消费者消费 所以就会产生消息堆积的问题
3.注意的是:
rabbitMQ 消费者我们的消息消费如果成功的话 消息会被立即删除。
kafka 或者 rocketMQ 消息消费如果成功的话,消息是不会立即被删除。

MQ 宕机了消息是否会丢失呢?

不会,因为我们消息会持久化在我们硬盘中。

MQ 如何保证消息不丢失?
1.MQ 服务器端 消息持久化到硬盘

2.生产者 消息确认机制 必须确认消息成功刷盘到硬盘中,才能够人为消息投递成功。

3.消费者 必须确认消息消费成功 。

rabbitMQ 中:才会将该消息删除。

rocketMQ 或者 kafka 中:消息消费后会提交 offse偏移量,消息并不会立即删除。

(消息删除通过日志保留策略配置,过了48小时在进行删除)

生产者投递消息,MQ 宕机了如何处理?

1.生产者投递消息会将 msg 消息内容记录下来,后期如果发生生产者投递消息失败;
2.可以根据该日志记录实现补偿机制;
3.补偿机制(获取到该 msg 日志消息内容实现重试)

MQ 如何保证消息顺序一致性问题?

将消息需要投递到同一个 MQ 服务器,同一个分区模型中存放,最终被同一个消费者消费。
核心原理:设定相同的消息 key,根据相同的消息 key 计算 hash 存放在同一个分区中。

产生背景:

MQ服务器集群或者MQ采用分区模型架构存放消息,每个分区对于一个消息者消费消息。

解决消息顺序一致性问题:

核心办法:消息一定要投递到同一个MQ、同一个分区模型,最终被同一个消费者消费。

根据消息key计算%分区模型总数。

理解:

1.大多数的项目是不需要保证 MQ 消息顺序一致性的问题,只有在一些特定的场景可能会需要,比如 MySQL 与 Redis 实现异步同步数据;

2.所有消息需要投递到同一个 MQ 服务器,同一个分区模型中存放,最终被同一个消费者消费,核心原理:设定相同的消息 key,根据相同的消息 key 计算 hash 存放在同一个分区中。
如果保证了消息顺序一致性有可能降低我们消费者消费的速率。
在这里插入图片描述

为什么保证了消息顺序一致性有可能降低我们消费者消费的速率?解决方案

在这里插入图片描述

MQ 如何保证消息幂等问题?

在这里插入图片描述

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

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

相关文章

终于要跟大家见面了,Flink 面试指南

面试,一个令人大多数同学头疼的问题,要么成功进入心仪公司,要么沮丧与其失之交臂。但是,如果能在面试前就能知道面试官将会问的问题,然后可以好好提前准备,这种感觉是不是特别棒? 之前社区帮大…

云转型谈何容易?打破转型阵痛,汇量科技加码云原生

作者 | 伍杏玲出品 | CSDN云计算10 年前,Netscape 创始人、硅谷著名投资人马克安德森表示“软件正在吞噬世界”,这只说了故事的一半,10 年过去,人们从不信任到得“云”者得天下,云服务成为正在吞噬世界的“大鱼”。工业…

SpingBoot 整合 kafka Elk

文章目录1. 依赖2. yml配置3. 测试类4. aop拦截5. 并发队列异步发送MQ6. 封装json消息7. 完整封装json消息1. 依赖 <dependencies><dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId></…

如何用一套引擎搞定机器学习全流程?

作者:陈戊超&#xff08;仲卓&#xff09; 深度学习技术在当代社会发挥的作用越来越大。目前深度学习被广泛应用于个性化推荐、商品搜索、人脸识别、机器翻译、自动驾驶等多个领域&#xff0c;此外还在向社会各个领域迅速渗透。 背景 当前&#xff0c;深度学习的应用越来越多…

分布式解决方案之分布式日志采集elk+kafka 环境的构建

文章目录一、软件下载列表1. zookeeper2. kafka3. logstash4. elasticsearch5. kibana6. zktools二、安装zk环境2.1. 上传安装包2.2. 解压2.3. 创建data目录2.4. 修改配置2.5.启动zk三、安装kafka环境3.1. 上传安装包3.2. 解压kafka安装包3.3. 创建data文件夹3.4. 修改配置3.5.…

基于https国密算法构建安全数据传输链路

网络数据安全得到前所未有的重视 HTTPS成为解决传输安全问题利器 大家都知道&#xff0c;HTTP 本身是明文传输的&#xff0c;没有经过任何安全处理&#xff0c;网站HTTPS解决方案通过在HTTP协议之上引入证书服务&#xff0c;完美解决网站的安全问题。 下图左侧表示Chrome浏览…

AOP+自定义注解 实现service统一的异常信息处理

返回信息枚举 TipsMsg&#xff1a; public enum TipsMsg {DEFAULT_SUCCESS("0","操作成功"),DEFAULT_FAILED("1","操作失败"),//其他枚举//get//set}自定义注解 ReturnMsg &#xff08;也是切点&#xff09; &#xff1a; Target(El…

跟风 Python 的人,后来都怎样了?

许多人觉得 Python 功能强大、就业范围范围广还上手轻松&#xff0c;得来全部费功夫。 但是一旦推开 Python 的大门你会发现&#xff0c;Python 入门容易但精通很难。看似语法掌握熟练&#xff0c;但一面试或者做项目就会被打回原形。 比如&#xff1a; 1&#xff09;如何写出高…

Kubernetes 是一个“数据库”吗?

作者 | 张磊&#xff0c;阿里云高级技术专家、CNCF 官方大使&#xff0c;CNCF 应用交付领域 co-chair&#xff0c;Kubernetes 项目资深维护者 最近&#xff0c;Kubernetes 社区里有一个关于“Kubernetes is the new database”的论述&#xff0c;引起了很多人的关注。当然&…

云原生下的开发测试

【以下为分享实录&#xff0c;有删节】 测试环境管理之困与阿里巴巴的解决之道 在云原生时代下&#xff0c;软件的迭代速度越来越快&#xff0c;对测试的要求也越来越高&#xff0c;很多开发者开始使用Kubernetes来管理测试环境。在这个过程中&#xff0c;开发者会遇到很多困…

我是程序员,我用这种方式铭记历史

作者 | kokohuang责编 | 晋兆雨头图 | 付费下载于视觉中国✨抗战直播: 以图文方式“直播”1931年9月18日至1945年9月2日14年间抗战的日日夜夜✨开源地址&#xff1a;https://github.com/kokohuang/WarOfResistanceLive✨预览地址&#xff1a;https://kokohuang.github.io/WarOf…

分布式ELK日志采集系统

文章目录1. 传统日志采集存在哪些优缺点2. Elk采集日志的原理3. 为什么需要将日志存储在ElasticSeach 而不是mysql中呢4. 为什么需要使用elkkafka5. elkkafka原理6. elkkafka 环境的构建7. SpingBoot 整合 kafka Elk1.传统日志采集存在哪些问题2.分布式日志采集有哪些方案3.Ela…

从零入门 Serverless | 架构的演进

作者 | 许晓斌 阿里云高级技术专家 本文整理自《Serverless 技术公开课》第 1 讲&#xff0c;点击开始学习。 关注 “Serverless” 公众号&#xff0c;回复 入门 &#xff0c;即可获取 Serverless 系列文章 PPT。 传统单体应用架构 十多年前主流的应用架构都是单体应用&…

如何使用 Istio 进行多集群部署管理:多控制平面

作者 | 王夕宁 阿里云高级技术专家 导读&#xff1a;本文摘自于阿里云高级技术专家王夕宁撰写的《Istio 服务网格技术解析与实战》一书&#xff0c;讲述了如何使用 Istio 进行多集群部署管理来阐述服务网格对多云环境、多集群即混合部署的支持能力。 前文详情&#xff1a; …

JDK8新特性入门到精通

文章目录一、 接口中默认方法修饰为普通方法1. 在jdk8之前2. 在JDK 1.8开始3. 案例演练二、Lambda表达式2.1. 什么是Lambda表达式2.2. 为什么要使用Lambda表达式2.3. Lambda表达式的规范2.4. 函数接口定义2.5. Lambda基础语法2.6. 方法引入2.7. Lambda实战案例三、java 8 strea…

一文聊“图”,从图数据库到知识图谱

作者 | 穆琼责编 | 晋兆雨头图 | 付费下载于视觉中国随着知识图谱的发展&#xff0c;图数据库一词被越来越多的提到。那么到底什么是图数据库&#xff0c;为什么要用图数据库&#xff0c;如何去建设一个图数据库应用系统&#xff0c;图数据库与知识图谱到底是什么关系。今天为大…

阿里云机器学习PAI DSW 2.0 Alink商业版重磅发布

DSW 2.0&#xff1a;面向AI研发的集成开发平台 DSW&#xff08;Data Science Workshop&#xff09;是阿里巴巴PAI团队根据多年的AI算法和产品研发经验积累&#xff0c;围绕提高AI算法研发效率&#xff0c;降低研发成本而推出的一款适用于各类AI开发者的云端机器学习集成开发环…

DSW:面向AI研发的集成开发平台

发布会传送门 产品详情 云原生技术&#xff0c;注重用户体验&#xff0c;提升研发效率 环境搭建是算法研发过程中的重要一环&#xff0c;这里除了硬件选型外&#xff0c;软件环境的安装配置&#xff0c;后续升级往往会耗费不少时间。DSW借助阿里云ECS&#xff0c;Docker和Ku…

程序员应如何理解高并发中的协程

来源 | 码农的荒岛求生责编 | 晋兆雨头图 | 付费下载于视觉中国作为程序员&#xff0c;想必你多多少少听过协程这个词&#xff0c;这项技术近年来越来越多的出现在程序员的视野当中&#xff0c;尤其高性能高并发领域。当你的同学、同事提到协程时如果你的大脑一片空白&#xff…