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

news2024/9/20 20:21:46

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.coloradmin.cn/o/1994715.html

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

相关文章

WPF学习(12)-Image图像控件+GroupBox标题容器控件

Image图像控件 Image也算是独门独户的控件,因为它是直接继承于FrameworkElement基类。 Image控件就是图像显示控件。Image类能够加载显示的图片格式有.bmp、.gif、.ico、.jpg、.png、.wdp 和 .tiff。要注意的是,加载.gif动画图片时,仅显示第…

58 mysql 存储引擎之 MEMORY

前言 我们这里来看一下 MEMORY 存储引擎, 我们常见的那些 临时表什么的, 都是基于 MEMORY 在之前 我们也曾经调试过 相关内存临时表的信息 它主要是 使用 hp_scan, hp_find_record 等等 api 来操作内存中的信息 我们这里基于 information_schema.TABLES 这张基于 MEMORY 的…

6.3.面向对象技术-设计模式

设计模式 设计模式创建型模型速记口诀 结构型设计模式速记口诀 行为型设计模式速记口诀 练习题 设计模式 上午2-4分,记忆点很多 要具体了解推荐看书籍《大话设计模式》 架构模式:软件设计中的高层决策,例如C/S结构就属于架构模式&#xff0…

赛盈分销亮相AI科技大会暨亚马逊新增长大会,与企业共话跨境品牌发展新机遇!

八月开端,由知无不言与xmars和钱老师课堂联合主办的2024年AI科技大会暨亚马逊新增长大会在深圳宝安顺利开展,为期2天的跨境峰会吸引了上千位优秀的卖家朋友前来感受一场盛夏大狂欢。在本次跨境峰会里,邀请了多位不同领域的先锋人物&#xff0…

在国产芯片上实现YOLOv5/v8图像AI识别-【2.4】导出RKNN模型(第一部分:模型修改)更多内容见视频

本专栏主要是提供一种国产化图像识别的解决方案,专栏中实现了YOLOv5/v8在国产化芯片上的使用部署,并可以实现网页端实时查看。根据自己的具体需求可以直接产品化部署使用。 B站配套视频:https://www.bilibili.com/video/BV1or421T74f 基础…

挖矿木马攻破了服务器

最近被国外的挖矿木马攻破了服务器 根据非法登录,用 #last指令查看登录ip 首先删掉登录主机 #kill -9 pts/0 第二步 #top 看看什么占用cpu高 第三步杀死狂刷CPU的服务 过一分钟后,服务又开始狂刷cpu。 第四步根据pid查到服务地址 #systemctl status…

frameworks 之ServiceManager

frameworks 之ServiceManager 解析启动入口启动AIDL实现类客户端Bp发送讲解1. 获取 BpServiceManager创建代理类 ServiceManagerShim 返回调用对应AIDL方法调用驱动通知 服务端Bn接收讲解注册Binder回调监听Binder消息处理 备注 ServiceManager 作为android中的路由器提供服务注…

正则表达式扩展应用

使用扩展正则表达式 egrep 首先来看一条前面章节学习过的用来去除空白行和注释行的指令: grep -v ^$ regular_express.txt |grep -v ^# 可见,通常的 grep 指令需要使用两次管线命令。那么如果使用扩展正则表达式,则可以简化为:…

4K YouTube to MP3 Pro:跨平台音频提取与转换的好用工具

4K YouTube to MP3 Pro是一款专为追求高品质音频体验的用户设计的跨平台(支持Mac与Windows)音频提取与转换软件。该软件以其卓越的音频提取能力和简便的操作流程,在同类产品中脱颖而出,成为众多用户的心头好。 功能强大&#xff…

股吧评论自动采集工具推荐,一学就会

股市波动无常,股民情绪更是难以捉摸。但想象一下,如果能即时掌握东方财富网股吧里股民的热议话题与情绪倾向,那将对您的投资决策带来怎样的影响?本文将为您揭晓一款易于上手的股民评论自动采集工具,助您把握市场脉搏&a…

钉耙编程(5)

1008 猫咪们狂欢 分析&#xff1a; 会创建一个二分图 代码&#xff1a; #include <bits/stdc.h> #define ll long long #define INF 1e9 using namespace std; const int N10005; const int M100010; struct edge{ll v,c,ne; }e[M]; int h[N],idx1; int d[N],cur[N]; …

武汉流星汇聚:跨境电商行业的快速崛起者,以实力与口碑铸就辉煌

在跨境电商这片充满机遇与挑战的蓝海中&#xff0c;武汉流星汇聚电子商务有限公司如同一颗迅速升起的新星&#xff0c;以其独特的经营模式、专业的服务团队和卓越的业绩表现&#xff0c;在短短几年内实现了跨越式的发展&#xff0c;成为了业界内外瞩目的焦点。 自2019年成立以…

【重要通知】关于公众号、淘宝店铺、CSDN等平台更名的公告

尊敬的粉丝/用户朋友们&#xff1a; 您们好&#xff01; 感谢您一直以来对我们平台的支持与信任&#xff01;由于我们已经取得了作品登记证书&#xff0c;平台的名称和登记证书著作权人名称不一致&#xff0c;在打击盗版、防伪标识方面&#xff0c;对我们造成了一定的困扰 &am…

【漏洞复现】某赛通数据泄露防护(DLP)系统 NetSecConfigAjax SQL注入漏洞

0x01 产品简介 某赛通新一代数据泄露防护系统&#xff08;简称 DLP&#xff09;&#xff0c;以服务企事业单位进行数据资产梳理、数据安全防护为目标。系统采用平台化管理&#xff0c;将终端DLP、网络DLP、邮件DLP、存储扫描DLP、API 接口DLP 进行统一管理&#xff0c;模块化控…

共话肿瘤免疫壮丽里程 —— I-O Asia亚洲肿瘤诊疗与药物创新峰会9月广州启程

在2024年的今天&#xff0c;癌症的阴影依然笼罩着全球&#xff0c;它以其无声的侵袭&#xff0c;成为威胁人类健康的隐形杀手。根据国际癌症研究机构&#xff08;IARC&#xff09;的最新数据&#xff0c;全球癌症的发病率持续上升&#xff0c;预计在未来几年内&#xff0c;新发…

事务性邮件接口API如何集成以实现自动化?

事务性邮件接口API有哪些优势&#xff1f;邮件接口API集成方法&#xff1f; 通过集成事务性邮件接口API&#xff0c;企业可以实现邮件发送的自动化&#xff0c;提高效率&#xff0c;增强用户体验。AokSend将探讨如何集成事务性邮件接口API以实现自动化&#xff0c;并提供一些最…

仓储物流管理系统是什么?

仓储物流管理系统&#xff08;Warehouse Management System, WMS&#xff09;是一种专门设计用于管理和优化仓库操作的先进软件解决方案。这类系统的主要目的在于帮助企业在其仓库内更加高效地处理货物的接收、存储、拣选、包装及最终发货等一系列复杂的流程。以下是一些该系统…

Python 爬取网页水务数据并实现智慧水务前端可视化

提示&#xff1a;本文爬取深圳市环境水务集团有限公司的公开数据作为数据样例进行数据分析与可视化。 文章目录 一、爬虫二、对爬取的数据进行数据库、excel的存储与数据处理1.代码实现 三、应用Flask框架将后端获取数据后渲染到前端四、前端Echarts的使用1.下载echarts.min.js…

RHCA III之路---EX436-10

RHCA III之路---EX436-10 1. 题目2. 解题3. 验证 1. 题目 2. 解题 nodea上执行 pcs constraint location cluster436 prefers nodeb.private.example.com pcs constraint location cluster436 avoids nodea.private.example.com3. 验证 pcs resource curl 172.25.250.80

SAP通过代码函数创建定制/工作台/副本请求创建

注意事项&#xff1a;会跟标准的一样创建完毕会跳出来框框 DATA iv_new_request_type TYPE e070-trfunction. DATA es_new_request TYPE trwbo_request_header. DATA et_new_tasks TYPE trwbo_request_headers. DATA ev_request_changed LIKE trpari-w_v…