MQ简介和面试题

一,什么是MQ

MQ全称是Mwessage Queue(消息队列),是在消息传输过程中保存消息的容器,多用于分布式系统之间进行通信,解耦和低耦合性

二,常见的MQ产品

RebbitMQ,RocketMQ, ActiveMQ, Kafka, ZeroMQ, MetaMQ

其中我们最常用的是RebbitMQ,RocketMQ,和 Kafka 偶尔使用,其他的都已经淘汰

网址

RabbitMQ: One broker to queue them all | RabbitMQicon-default.png?t=N7T8https://www.rabbitmq.com/

三,作用 (面试题)为什么要使用MQ

主要是为了解决各种场景的会出现的弊端,和更好的开发以及更好的用户体验,

MQ消息队列作为一种中间件,能够帮助构建更为健壮、灵活、高性能的分布式系统架构

3.1,异步处理

场景说明:用户注册后需要发注册邮件和注册短信,传统的做法有两种 1.串行的方式 2.并行的方式

串行方式:将注册的信息写入数据库后,发送注册邮件,再发送注册短信,以上三个任务全部完成后才返回给客户端,可是短信和邮件并不是必须的,它只是一个通知,而这种做法会降低用户体验让用户等待没有必要的东西

并行方式:将注册信息写入数据库中后,发送邮件的同时也发送短信,完成以上三个任务之后,返回给客户端,并行的方式能提高处理时间

消息队列:假设三个业务节点分别使用50ms,串行方式使用时间150ms,并行使用时间100ms。虽然并行已经提高的处理时间,但是,前面说过,邮件和短信对正常的使用网站没有任何影响,客户端没有必要等着其发送完成才显示注册成功,应该是写入数据库后就返回.

引入消息队列后,把发送邮件,短信不是必须的业务逻辑异步处理

由此可以看出,引入消息队列后,用户的响应时间就等于写入数据库的时间+写入消息队列的时间(可以忽略不计),引入消息队列后处理后,响应时间是串行的3倍,是并行的2倍。

3.2、应用解耦

场景:双11是购物狂节,用户下单后,订单系统需要通知库存系统,传统的做法就是订单系统调用库存系统的接口.

这种做法有一个缺点:

当库存系统出现故障时,订单就会失败。 订单系统和库存系统高耦合. 引入消息队列

订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功。

库存系统:订阅下单的消息,获取下单消息,进行拆订单操作。 就算库存系统出现故障,消息队列也能保证消息的可靠投递,不会导致消息丢失.

3.3、流量削峰

场景: 秒杀活动,一般会因为流量过大,导致应用挂掉,为了解决这个问题,一般在应用前端加入消息队列。

作用:

1.可以控制活动人数,超过此一定阀值的订单直接丢弃.(但是我们不用)

2.可以缓解短时间的高流量压垮应用(应用程序按自己的最大处理能力获取订单)

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

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

相关文章

JUC_1

进程 概述 进程:程序是静止的,进程实体的运行过程就是进程,是系统进行资源分配的基本单位 进程的特征:并发性、异步性、动态性、独立性、结构性 线程:线程是属于进程的,是一个基本的 CPU 执行单元&#x…

什么是Redis共享Session?

如图所示,一个分布式部署的Web服务器将用户的Session信息(例如用户登录信息),保存在各自服务器内部。这样会造成一个问题,在分布式部署多个Web服务器时,我们通常会采用负载均衡算法,将多个用户的…

【计算机网络】应用层——HTTPS协议详解

文章目录 1. HTTPS 协议简介2. 了解“加密”3. HTTPS 保证数据安全传输的三大机制3.1 引入对称加密3.2 引入非对称加密3.3 引入“SSL/TLS证书”(防止中间人攻击)3.4 HTTPS安全机制总结 📄前言: 前面的文章已经对 HTTP 协议 进行了…

【LeetCode题解】1600. 王位继承顺序(前序遍历多分支树)

文章目录 [1600. 王位继承顺序](https://leetcode.cn/problems/throne-inheritance/)思路:前序遍历多分支树代码: 1600. 王位继承顺序 思路:前序遍历多分支树 1.用set集合来存放死亡的人数 2.用hashMap来存放每个父结点的子节点列表 3.每出…

Sora是什么?Sora怎么使用?Sora最新案例视频以及常见问题答疑

Sora 是什么? 2024年2月16日,OpenAI 在其官网上面正式宣布推出文本生成视频的大模型Sora 这样说吧给你一段话, 让你写一篇800字的论文,你的理解很可能都有偏差,那么作为OpenAi要做文生视频到底有多难,下面…

【Hadoop技术框架-MapReduce和Yarn的详细描述和部署】

前言: 💞💞大家好,我是书生♡,今天的内容主要是Hadoop的后两个组件:MapReduce和yarn的相关内容。同时还有Hadoop的完整流程。希望对大家有所帮助。感谢大家关注点赞。 💞💞前路漫漫&…

交换机与队列的简介

1.流程 首先先介绍一个简单的一个消息推送到接收的流程,提供一个简单的图 黄色的圈圈就是我们的消息推送服务,将消息推送到 中间方框里面也就是 rabbitMq的服务器,然后经过服务器里面的交换机、队列等各种关系(后面会详细讲&…

SVG图标显示

SVG图标显示 1.安装SharpVectors.Wpf包 2.添加引用 xmlns:svgc"http://sharpvectors.codeplex.com/svgc/"3.加载svg文件&#xff0c;生成操作选择资源(Resource) 4.UI界面显示SVG图像 <Button Click"OnSaveFileClick" ToolTip"Save Svg File…

二维相位解包理论算法和软件【全文翻译- 残差、梯度和相分解:示例 (2.72.8)】

2.7 残差、梯度和相分解&#xff1a;示例 观察第 2.3 节中提出的局部相位特性如何应用于现实世界是很有启发性的。我们将借助第 2.4 节中的亥姆霍兹分解定理来实现这一点。图 2.7(a)描述了一个 512512 像素的包裹相位函数&#xff0c;它是实际应用中可能遇到的典型相位函数。请…

【LeetCode】894. 所有可能的真二叉树

文章目录 [894. 所有可能的真二叉树](https://leetcode.cn/problems/all-possible-full-binary-trees/)思路一&#xff1a;分治代码&#xff1a;思路二&#xff1a;记忆化搜索代码&#xff1a; 894. 所有可能的真二叉树 思路一&#xff1a;分治 1.递归&#xff0c;n1 时&#…

动态规划——线性dp

图片来源&#xff1a;_snowstorm_ 路线问题的状态表示一般都可以用点的坐标来表示 状态表示数组维数的确定原则&#xff1a;在可以用该维数表示出答案的基础上维数尽可能最小 数字三角形 acwing 898 #include<iostream> #include<cstring> #include<algorith…

基于SpringBoot Vue大学生家教管理系统

一、&#x1f4dd;功能介绍 基于SpringBoot Vue大学生家教管理系统 角色&#xff1a;管理员、教师、学生 管理员&#xff1a;管理员进入主页面&#xff0c;主要功能包括对首页、个人中心、学生管理、教师管理、科目管理、家教需求管理、家教预约管理、取消预约管理、通知公告…