为什么使用MQ

news/2024/10/30 18:14:32/

 为什么使用MQ

1. 解耦

        消息队列可以实现系统解耦,允许独立扩展或修改系统的各个组成部分。生产者和消费者不需要同时联机,生产者发送消息后立即返回,不依赖于消费者的处理时间,消费者可以在任何时间从消息队列中获取消息而不依赖于生产者的运行时间,二者之间实现完全的时间解耦。

2. 异步

        通信消息队列可以实现系统之间的异步数据交互。生产者将消息发送到队列而不等待消费者回应,消费者在任意时间消费消息而不需要实时回应生产者,整个通信过程是异步的。

3. 削峰填谷

        消息队列可以削峰填谷,在并发量剧增的情况下,也能保证系统正常运转。生产消息的速度过快而消费者来不及处理时,消息会缓存在队列中,等到消费者处理完其他消息时再消费。反之,生产速度过慢,消费者也可以从队列中不断获取消息,保证消费者的资源得到充分利用。

4. 可靠性

        消息队列保证数据处理的可靠性。消息成功写入队列后,即使发生系统崩溃,消息也不会丢失,消费者可以再次启动后消费队列数据。这保证了数据最终可以被处理,提高了系统的可靠性。

5. 扩展性

        消息队列在数据量剧增和并发量激增的情况下,仍能保证高性能和数据不丢失。且消费者可以动态增减,以满足增加或下降的消息处理需求。使系统具有很好的扩展性。

        所以,总结来说,使用消息队列的主要目的是为了实现系统解耦,支持异步通信,提高系统可靠性与扩展性。消息队列具有削峰填谷的功能,能有效应对数据量和并发激增的情况,保证系统正常运转。 

部分解析

        在我们平日里无论是通过各种方式学习MQ最先看到的都是MQ的三大优点:异步、削峰、解耦。那么下面我们进行一下这三点的分析,在面试时可靠性和扩展性往往是我们提出来后去引导面试官问下面的问题。

异步

        在电商系统中,当用户下单完毕后,会进行库存扣减等相关操作,如果库存扣减完毕后再返回给用户下单成功显然不是很友好,为了解决这个问题就可以使用MQ,实现异步减少响应耗时。

削峰

       在电商系统中,平时的请求量是足以应对的,但是诸如618、11 11等大促日期,假设订单系统每秒只能处理2000个请求的时候,那么订单系统将会崩溃。当引入MQ后,A系统可以慢慢去MQ中拉取请求进行处理,不至于系统崩溃。

        在这里面涉及到一个MQ消息积压问题,因为平时每秒的下单量可能也就200, 过去了高峰期MQ仍以2000/s消耗队列任务,进行任务消费。还可以补充说明一些增加消费者、扩充队列容量等方案。

 

解耦

场景举例

        在电商系统中,订单管理系统需要将订单数据发送给库存管理系统、物流管理系统和财务管理系统三个系统。如果此时新加入一个其它系统或者财务管理系统不需要订单管理系统下发了呢,在这里面各个系统都与订单管理系统存在高度耦合。

        这个时候引入MQ,订单管理系统完全可以将消息发送到MQ中,至于你其他什么系统需要这个数据就自己去MQ中去拿就好了,不需要考虑其它系统是否成功调用等情况。

        对与在工业物联网工作的小伙伴,应该也使用过自己维护的系统(MQTT协议通讯)->EMQX<-外部系统,AGV等(MQTT通讯)

        这里面的EMQX就是一个Broker服务器,我们的系统只需要发布相应的Topic给Emqx服务器就好了,Agv或者其他系统如果需要就去Broker进行Topic订阅。在这里Emqx就实现各个系统间的解耦。


http://www.ppmy.cn/news/107896.html

相关文章

Kali渗透Windows服务器

这个实验主要让我们学习漏洞扫描技术基本原理&#xff0c;了解其在网络攻防中的作用&#xff0c;掌握使用Kali中的Metasploit对目标主机渗透&#xff0c;并根据报告做出相应的防护措施。 本次实战环境&#xff1a;Kali渗透Windows服务器 实战步骤一 本实验通过利用kali进行漏…

C Primer Plus第十三章编程练习答案

学完C语言之后&#xff0c;我就去阅读《C Primer Plus》这本经典的C语言书籍&#xff0c;对每一章的编程练习题都做了相关的解答&#xff0c;仅仅代表着我个人的解答思路&#xff0c;如有错误&#xff0c;请各位大佬帮忙点出&#xff01; 由于使用的是命令行参数常用于linux系…

C专家编程【美】Peter Van Der Linden

近期看了一本【美】Peter Van Der Linden 写的《C专家编程》&#xff0c;将一些概念总结记录如下&#xff1a; 1. C语言把数组形参当作指针&#xff0c; 如&#xff1a;func(char p[]) 2. 数组下标的规则高数我们如何计算左值pea[i][j], 首先找到pea[i]的位置&#xff0c; 然…

前端面试题整理9

1.什么是类数组&#xff1f;Js中类数组如何转化数组&#xff1f; 类数组是具有length属性&#xff0c;但不具备数组方法的对象。 类数组转换为数组&#xff1a;①Array.prototype.slice.call()&#xff1b;②Array.from()&#xff1b;③扩展运算符&#xff08;…&#xff09;…

JavaScript高级三、深入面向对象

零、文章目录 JavaScript高级三、深入面向对象 1、编程思想 &#xff08;1&#xff09;面向过程介绍 面向过程&#xff1a;分析出解决问题所需要的步骤&#xff0c;然后用函数把这些步骤一步一步实现&#xff0c;使用的时候再一个一个的依次调用就可以了。 &#xff08;2&…

Revit中如何为曲面墙体开洞口,一键开洞?

一、Revit中如何为曲面墙体开洞口 直线墙体开洞可以直接通过编辑轮廓来绘制洞口形状即可&#xff0c;或者可以通过选中墙体选择“墙-洞口”命令来开洞口。 但是曲面墙体开洞并没有那么简单&#xff0c;曲面墙体不能够编辑轮廓&#xff0c;并且选中曲面墙体“墙-洞口”命令只能够…

JVM-基础知识

JVM基础知识 JVM结构图 字节码文件 Java虚拟机不和包括Java在内的任何语言绑定,它只与字节码文件这种特定的二进制文件格式所关联. Class文件结构不仅仅是JVM的执行入口,更是Java生态圈的基础和核心. 字节码文件内容是什么 字节码是一种二进制的类文件,他的内容是JVM指令,而…

AI语音外呼机器人对于企业的市场有什么促进作用

AI智能语音外呼系统是一种基于人工智能技术的自动外呼系统&#xff0c;实现了电话自动拨打和语音播报等功能&#xff0c;主要应用于商业领域中的市场营销、客服等方面。 AI智能语音外呼机器人主要应用于商业领域中的市场营销、客服等方面。通过采用先进的自然语言处理技术、语…