Java面试题精选:消息队列(一)

1、为什么使用消息队列

问题用意:

其实就是想问一下消息队列有哪些使用场景,你项目中什么业务场景用到了消息队列,有什么技术挑战。使用MQ后给你带来了什么好处

规范回答:

消息队列的常见使用场景很多,但比较核心的有3个:解耦、异步、流量削峰填谷

在这里插入图片描述

1. 解耦

A系统发送数据到B系统再发送数据到C系统。A要时刻考虑B或C会不会挂掉,B也的考虑C会不会挂掉。但使用MQ的话,B将消息发送给MQ后,就不会再考虑后面的事情了。

所以你需要考虑一下自己的项目中是否有类似的场景,就是一个系统或一个模块调用了多个系统或模块,并且互相之间的调用很复杂,维护起来麻烦。并且这个调用也不是必须同步调用接口的,那就可以MQ给它异步化解耦。

2. 异步

A系统接收了一个请求,需要在自己本地写库,还需要在B、C系统写库。自己本地写库要30ms,B、C写库分别需要300ms、450ms。那最终请求总时延就是30+300+450=780ms。异步后,B、C系统分别写库的时间,A系统就不再考虑了。

3.削峰

每天0点到16点,B系统风平浪静,每秒并发请求数是1W个。结果每次一到16点到23点,每秒并发请求数突然会暴增到30万条。但C系统最大处理能力就只能是每秒钟1w请求。这时候就需要添加MQ进行流量的削峰,让系统可以平缓的处理突增的请求

2、消息队列有什么优点和缺点

优点:

  • 解耦
  • 异步
  • 削峰

缺点:

  • 系统可用性降低

    系统引入的外部依赖越多,越容易挂掉,本来A系统调用BCD三个系统的接口就好了,ABCD四个系统好好的,没啥问题,你偏加个MQ进来,万一MQ挂了怎么办?MQ挂了,整套系统崩溃了,业务也就停顿了。
    解决方法:MQ可以加集群,防止MQ挂了而影响整个系统的性能

  • 系统复杂性提高

    添加MQ后,如何保证消息没有重复消费?如何处理消息丢失的情况?如何保证消息传递的顺序性

  • 一致性问题
    A系统处理结束后直接返回成功,可能都以为这个请求就成功了;但是问题是,要是BCD三个系统那里,BD两个系统写库成功了,结果C系统写库失败了,就会导致数据不一致。

所以消息队列实际是一种非常复杂的架构,引入它有很多好处,但是也需要针对它带来的坏处做各种额外的技术方案和架构来进行规避。

3、常见消息队列比较

在这里插入图片描述

4、如何解决重复消费

消息被重复消费,就是消费方多次接收到了同一条消息。根本原因就是,第一次消费完之后,消费方给 MQ 确认已消费的反馈,MQ 没有成功接受。比如网络原因、MQ 重启等。所以MQ 是无法保证消息不被重复消费的,只能业务系统层面考虑

不被重复消费的问题,就被转化为消息消费的幂等性的问题。幂等性就是指一次和多次请求的结果一致,多次请求不会产生副作用。

保证消息消费的幂等性可以考虑下面的方式

  • 给消息生成全局 id,消费成功过的消息可以直接丢弃。消息中保存业务数据的主键字段,结合业务系统需求场景进行处理,避免多次插入。是否可以根据主键多次更新而并不影响结果等

5、让你来设计一个消息队列,你会怎么设计

(1)数据存储角度
理论上,从速度来看,分布式文件系统 > 分布式KV(持久化)> 数据库;而可靠性却截然相反,如果追求性能可以基于文件系统的顺序写。

(2)高可用角度:分区+复制+选举的思想

(3)网络框架角度:选用高效的Netty框架,producer 同步异步发送消息,consumer 同步异步接收消息。同步能够保证结果,异步能够保证性能。

6、有几百万消息持续积压几小时,说说怎么解决?

  发生了线上故障,几千万条数据在MQ里积压很久。是修复consumer的问题,让他恢复消费速度,然后等待几个小时消费完毕。这是个解决方案。不过有时候我们还会进行临时紧急扩容。

   一个消费者一秒是1000条,一秒3个消费者是3000条,一分钟是18万条。1000多万条,所以如果积压了几百万到上千万的数据,即使消费者恢复了,也需要大概1小时的时间才能恢复过来。

一般这个时候,只能操作临时紧急扩容了,具体操作步骤和思路如下:
(1)先修复consumer的问题,确保其恢复消费速度,然后将现有consumer都停掉。
(2)新建一个topic,partition是原来的10倍,临时建立好原先10倍或者20倍的queue数量。
(3)然后写一个临时的分发数据的consumer程序,这个程序部署上去消费积压的数据,消费之后不做耗时的处理,直接均匀轮询写入临时建立好的10倍数量的queue。
(4)接着临时征用10倍的机器来部署consumer,每一批consumer消费一个临时queue的数据。

  这种做法相当于是临时将queue资源和consumer资源扩大10倍,以正常的10倍速度来消费数据。等快速消费完积压数据之后,再恢复原先部署架构,重新用原先的consumer机器来消费消息。

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

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

相关文章

【漏洞修复】Tomcat中间件漏洞

1.CVE-2017-12615 抓包上传一句话木马 密码passwd 2.后台弱口令部署war包 先用弱口令登录网站后台 制作war包 将172.jsp压缩成.zip文件,修改后缀为.war 上传 蚁剑链接 3.CVE-2020-1938 Python2 CVE-2020-1938.py IP -p 端口 -f 要读取的文件 漏洞修复&#xf…

超越自我——带你学haproxy算法一遍过!!!

文章目录 前言介绍 静态算法static-rrfirst 动态算法roundrobinleastconn 其他算法source算法map-base 取模法一致性hashuriurI_param 取模法hdr 总结本文相关连接如下: 前言 本文相关连接如下: 如果想更多了解haproxy的相关知识,请点击&am…

HTTP协议和运行原理

HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。不仅仅适用于[服务器<–>客户端]也是适用于[服务器<–>服务器] HTTP 状态码 1xx 1xx 类状态码属于提示信息&#xff0c;是协议处理中的一种中间状态&#xff0c;实际…

操作系统 IO 相关知识

操作系统 IO 相关知识 阻塞与非阻塞同步与异步IO 和系统调用传统的 IODMAmmap 内存映射sendfilesplice 常用的 IO 模型BIO&#xff1a;同步阻塞 IONIO&#xff1a;同步非阻塞 IOIO 多路复用信号驱动 IOAIO&#xff1a;异步 IO 模型 IO 就是计算机内部与外部进行数据传输的过程&…

加密案例分享:电子设备制造行业

企业核心诉求选择 1.某企业规模庞大&#xff0c;分支众多&#xff0c;数据安全管理方面极为复杂&#xff1b; 2.企业结构复杂&#xff0c;包括研发、销售、财务、总部、分部、办事处、销售等单位连结成为一个庞大的企业组织&#xff0c;数据产生、存储、流转、使用、销毁变化…

NIO线程模型

NIO线程模型主要涉及以下几个方面&#xff1a; 一、基本概念 NIO&#xff08;New Input/Output&#xff09;是Java的一种新的输入输出模型&#xff0c;也被称为非阻塞IO。其核心特点是数据读写操作均是非阻塞的&#xff0c;即在进行读写操作时&#xff0c;若数据未准备好&…

第129天:内网安全-横向移动WmiSmbCrackMapExecProxyChainsImpacket

这里这个环境继续上一篇文章搭建的环境 案例一&#xff1a; 域横向移动-WMI-自带&命令&套件&插件 首先上线win2008 首先提权到system权限 wmic是windows自带的命令&#xff0c;可以通过135端口进行连接利用&#xff0c;只支持明文方式&#xff0c;优点是不用上传别…

【区块链+医疗健康】医链 - 区块链医疗信息管理系统 | FISCO BCOS应用案例

根据《“十四五”规划和 2035 远景目标纲要》&#xff0c;我国在“十四五”时期将全面推进医疗信息化建设。工信部等部 门联合发布《关于加快推动区块链技术应用和产业发展的指导意见》&#xff0c;促进区块链在医疗健康等公共服务领域开 展应用&#xff0c;促进业务协同办理。…

ES6 export import

1.Export 模块是独立的文件&#xff0c;该文件内部的所有的变量外部都无法获取。如果希望获取某个变量&#xff0c;必须通过export输出&#xff0c; 声明的同时导出变量、函数以及类 // profile.js export var firstName Michael; export var lastName Jackson; export var…

【JUC】Java对象内存布局和对象头

文章目录 面试题Object object new Object() 谈谈你对这句话的理解&#xff1f; 对象在堆内存中存储布局权威定义&#xff08;周志明老师JVM第三版&#xff09;对象在堆内存中的存储布局详解对象头的MarkWord源码对象标记源码 对象内存布局&#xff08;使用JOL证明&#xff09…

猫头虎 分享已解决Bug || java.lang.NullPointerException 解决方案

&#x1f42f; 猫头虎 分享已解决Bug || java.lang.NullPointerException 解决方案 在 后端开发过程中&#xff0c;我们经常会遇到各种各样的Bug。而其中最常见之一就是 java.lang.NullPointerException。很多小伙伴在遇到这个问题时&#xff0c;往往会感到非常头痛&#xff0…

设计模式-单一职责模式

DecoratorBridge Decorator 动机 在某些情况下我们可能会 “过度地使用继承来扩展对象的功能”&#xff0c;由于继承为类型引入的静态特质&#xff0c;使得这种扩展方式缺乏灵活性&#xff1b;并且随着子类的增多&#xff08;扩展功能的增多&#xff09;&#xff0c;各种子类的…

yolov8断点续训

1. 前言 我们在使用yolov8进行训练的时候往往会因为各种各样的原因中断训练&#xff0c;如&#xff1a; 开了太多程序导致崩溃突然断电其他原因 这时候如果下次能继续上次训练的结果继续训练会节省很多时间 2.复现与解决办法 2.1 正常启动训练 yolov8环境搭建与简单配置请…

给 Python 的第三方模块安装工具 pip 换源

sudo mkdir ~/.pipcd .pipsudo nano pip.conf[global] timeout 10 index-url http://mirrors.aliyun.com/pypi/simple/ extra-index-url http://pypi.douban.com/simple/ [install] trusted-hostmirrors.aliyun.compypi.douban.com喜欢或对你有帮助&#xff0c;点个赞吧&…

PMBOK® 第六版 规划范围管理

目录 读后感—PMBOK第六版 目录 规划范围管理就像是为项目划定清晰的界限&#xff0c;通过书面形式明确项目团队必须完成的工作&#xff0c;这有助于有效控制和交付目标产品&#xff0c;防止范围蔓延&#xff0c;合理分配资源&#xff0c;从而提高项目成功率和客户满意度。 一…

Tomcat搭建JSPServlet

一、Tomcat环境搭建 1. 将项目变为Web项目 选中项目&#xff0c;点击Help中的Find Action 搜索Add Framework Support 勾选Web Application 出现这些文件就是成功了 2. 配置Tomcat 点击Edit Configurations 点击加号&#xff0c;选择Tomcat Server Local Deployment栏下点击…

WPF篇(9)-CheckBox复选框+RadioButton单选框+RepeatButton重复按钮

CheckBox复选框 CheckBox继承于ToggleButton&#xff0c;而ToggleButton继承于ButtonBase基类。 案例 前端代码 <StackPanel Orientation"Horizontal" HorizontalAlignment"Center" VerticalAlignment"Center"><TextBlock Text"…

前端学习笔记-JS篇-01

JS基础Day1-01-必看-基本软件以及准备工作_哔哩哔哩_bilibili JavaScript介绍 是什么 1.JavaScript (是什么?) 是一种运行在客户端(浏览器)的编程语言&#xff0c;实现人机交互效果2.作用(做什么?) 网页特效(监听用户的一些行为让网页作出对应的反馈)表单验证(针对表单…

8.9-python管理

一、回顾 [rootpython ~]# vim test.py ​ a3 b4 print(ab) print(a**2b**2) print(25**0.5) ​ [rootpython ~]# python3 test.py 7 25 5.0 ​ ​ #调试test.py脚本 [rootpython ~]# python3 -m pdb test.py > /root/test.py(1)<module>() -> a3 (Pdb) n > …

SpringCloud天机学堂:我的课表(三)

SpringCloud天机学堂&#xff1a;我的课表&#xff08;三&#xff09; 文章目录 SpringCloud天机学堂&#xff1a;我的课表&#xff08;三&#xff09;1、添加课程到课表2、分页查询课表3、查询正在学习的课程 1、添加课程到课表 首先&#xff0c;用户支付完成后&#xff0c;需…