消息队列(MQ)到底能干什么?

为什么要用MQ? 为什么要用MQ? mq是先进先出的数据结构。 1.应用解耦 项目A要给项目B发送数据,按照传统的做法是通过RPC远程调用,RPC远程调用耦合度非常高。如果使用消息队列,A系统把消息发给mq,B系统只需要订阅,这样就大大的实现了解耦。 系统的耦合性越高,容错性就越低。以电商应用为例,用户创建订单后,如果耦合调用库存系统、物流系统、支付系统,任何- -个子系统出了故障或者因为升级等原因暂时不可... 阅读详情

一、什么是MQ?

MQ全称为Message Queue,也就是消息队列,是应用程序和应用程序之间的通信方法。

二、MQ能用来干什么?

能用来干什么,也就是MQ的适用场景。

在微服务盛行的当下,MQ被使用的也是越来越多,一般常用来进行业务异步解耦、解耦微服务、流量削峰填谷、消息分发、分布式事务的数据一致性,我们分别来看一下。

1、业务异步解耦

在正常业务流程中,比较耗时而且不需要即时返回结果的操作。将这些操作可以做为异步处理,这样可以大大的加快请求的响应时间。

最常见的场景就是用户注册之后,需要发送注册短信、邮件通知,以告知相关信息。

正常做法,是要经过三大步处理:用户信息处理、发送邮件、发送短信,等这三步全部都完成之后,才返回前端,告诉你注册成功了。

使用MQ,只需要在处理完用户信息之后,给MQ发送两个消息即可,邮件服务、短信服务监听MQ的任务消息,根据消息进行发送即可。

2、解耦微服务

还是用户注册的例子,将用户注册、邮件/短信发送理解为两个独立的微服务,就非常好理解。

3、流量削峰填谷

控制流量,也是MQ比较常用的一个场景,一般在秒杀、搞活动中使用广泛。这个时候一般用户请求量会激增,可能会远超当前系统的最大处理量,如果不做任何处理,系统可能就会宕掉。

使用MQ,可以将需要处理的消息全部放入其中,系统按照最大处理能力,去获取消息进行消费,这样就可以将一瞬间过来的请求,分散到一段时间内进行处理,避免了系统的崩溃。

4、消息分发

这个也挺常用。多个系统对同一个数据感兴趣,只需要监听同一类消息即可。

例如付款系统,在付款成功之后,正常做法是通知外围系统这个单子付款成功了,或者是外围系统定时来拉取付款结果,使用MQ后,付款系统可以在付款成功之后,将消息放到MQ里面,想知道这个结果的系统订阅这个主题的消息即可,非常方便,也不需要定时去拉取数据了。

5、分布式事务的数据一致性

先说明下,现在有一个专门处理分布式事务的开源框架Seata。在Seata出来之前,涉及到的分布式事务一般都通过消息中间件进行处理。

Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。

目前主流的MQ框架,都支持分布式事务消息,好多小伙伴可能在初次接触的时候,会很有疑惑,到底是如何保证事务一致性的呢?下图来自阿里云,说的很明白,有点复杂的流程图,静下心来看或者略过不看

image-20210403215817338

事务消息发送步骤如下:

  1. 发送方将半事务消息发送至消息队列RocketMQ。
  2. 消息队列RocketMQ将消息持久化成功之后,向发送方返回Ack确认消息已经发送成功,此时消息为半事务消息。
  3. 发送方开始执行本地事务逻辑。
  4. 发送方根据本地事务执行结果向服务端提交二次确认(Commit或是Rollback),服务端收到Commit状态则将半事务消息标记为可投递,订阅方最终将收到该消息;服务端收到Rollback状态则删除半事务消息,订阅方将不会接受该消息。

事务消息回查步骤如下:

  1. 在断网或者是应用重启的特殊情况下,上述步骤4提交的二次确认最终未到达服务端,经过固定时间后服务端将对该消息发起消息回查。
  2. 发送方收到消息回查后,需要检查对应消息的本地事务执行的最终结果。
  3. 发送方根据检查得到的本地事务的最终状态再次提交二次确认,服务端仍按照步骤4对半事务消息进行操作。

三、有啥缺点

1、系统可用性降低

系统可用性在某种程度上降低。在加入MQ之前,你不用考虑消息丢失或者说MQ挂掉等等的情况,但是,引入MQ之后你就需要去考虑了!

2、系统复杂性提高

加入MQ之后,首先就是你要具备有消息队列的相关知识,需要保证消息没有被重复消费、处理消息丢失的情况、保证消息传递的顺序性等等问题!

3、一致性问题

从上面的使用场景来看,消息队列带来的异步确实可以提高系统响应速度。但是,万一消息的真正消费者并没有正确消费消息怎么办?这样就会导致数据不一致的情况了!

四、总结

MQ的优点很多,但也存在缺点,所以大家还是要根据具体的业务场景来分析是否有必要使用消息中间件。有时候使用简单的技术可能效果会更好。

目前市面上比较流行的MQ有挺多的,例如:kafka、RocketMQ、RabbitMQ,那他们都有什么优缺点,到底该如何选择呢?关注公众号「Hugh的白板」,下篇文章给出答案。

一文了解消息队列MQ(超详细+干货满满) 阅读详情

相关推荐

12. 消息队列-MQ概述

MQ(Message Queue)是一种跨进程的通信机制,用于上下游传递消息。早已成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。

princemilo的博客 2237

什么是MQ?为什么要用MQ?MQ分类、MQ的选择

一、什么是MQ? MQ(message queue),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了MQ之后,消息发送上游只需要依赖MQ,不用依赖其他服务。 二、为什么要用MQ 1、流量消峰 举个例子,如果订单系统最多能处理一万次订单,这个处理能力应付正常时段的下单时绰绰有余,正常时段我...

花&败 1万+

Rabbit MQ消息队列原理

一,MQ的三大特性 异步: 同步是发出一个调用请求之后,在没有得到结果之前,就不返回,调用者主动等待这个调用结果。异步通信不需要客户端等待,可以减少客户端性能消耗,大大地提升用户的体验。 **解耦:**降低系统的耦合性,(耦合的意思是模块间的紧密联系,修改一个模块,多个模块都需要修改)例如A系统向B,C,D三个系统发送消息,如果其中一个失败,那么导致整个逻辑失败。(火车退票为例,增库存,支付接口,系统API通知) **削峰:**电商系统中,有一个瞬间流量达到峰值的情况,普通服务器无法支撑百万或者千万级别的并

qq_43170213的博客 2905

【RabbitMQ】MQ的基本概念、RabbitMQ简介及安装

本文涉及MQ的基本概念、RabbitMQ简介、RabbitMQ的安装等内容

十八岁讨厌编程的博客 2万+

关于并网继电器的继电器自检逻辑及实现方式

对于常规的光伏并网逆变器来说,继电器控制至关重要。继电器一般位于逆变电感后,共模电感前,用于将逆变电压与电网电压脱开,一般国外有双继电器的安规强制认证要求,国内目前只需要单继电器要求(后续应该会有双继电器要求,个人感觉)

weixin_29982209的博客 2614

【Python程序开发】湖南省职业院校技能大赛python程序开发赛项样题二

【Python程序开发】湖南省职业院校技能大赛python程序开发赛项样题二

况老师话竞赛&blog 2196

MQ消息队列详解、四大MQ的优缺点分析

MQ消息队列详解 近期有了想跳槽的打算,所以自己想巩固一下自己的技术,想了解一些面试比较容易加分的项,近期准备深入研究一下redis和mq这两样,这总体上都是为了解决服务器并发的原因,刚翻到了一篇有关于mq的,觉得写得特别好,特此记录一下,也算是为了加深自己的印象。 首先从MQ容易面对的面试题切入一下 为什么要使用MQ 消息队列有什么优点和缺点 kafka、ActiveMQ、RabbitMQ、R...

光头强的博客 20万+

单细胞转录组数据分析全流程:从原始数据到细胞注释

本文详细介绍了单细胞转录组数据分析的全流程,从原始数据读取、环境搭建、数据质控与标准化,到降维聚类、细胞类型注释,以及高级质控与多样本整合。重点阐述了如何利用Seurat等工具进行数据处理,并通过标志基因比对与自动注释方法完成细胞身份鉴定,为研究者提供了一套清晰、可操作的分析指南。

coffee的博客 553

[MQ]什么是消息队列?

什么是消息队列MQ(Message Queue)? 消息(Message):传输的数据。 队列(Queue):队列是一种先进先出的数据结构。 消息队列从字面的含义来看就是一个存放消息的容器。 消息队列可以简单理解为:把要传输的数据放在队列中。 把数据放到消息队列叫做生产者 从消息队列里边取数据叫做消费者 一般来说,消息队列是一种异步的服务间通信方式,是分布式系统中重要的...

超越 1万+

ADS新手必看:5分钟搞定Smith圆图阻抗匹配(附详细操作截图)

本文为射频电路设计新手提供了在ADS软件中快速使用Smith圆图进行阻抗匹配的实战指南。通过清晰的步骤和操作截图,详细演示了如何从负载阻抗点出发,通过添加电感和电容元件,在5分钟内完成向50欧姆标准阻抗的匹配,并介绍了仿真验证与性能调优的方法,帮助工程师和学生直观掌握这一核心技能。

weixin_29261711的博客 392

Win10 Rational Rose 安装教程

在此教程中我们需要四个文件,点此下载[提取码:ig33] 其中第一个为2007的安装包,第二个为破解文件 前言 很多小伙伴反应说会出现几天后就到期的问题,包括我也出现了该问题,如果你已在其他地方安装好了文件且破解成功,且但几天后到期,如果可以使用更改时间的方式打开,那么可以跳过接下来的教程,直接看第三节,我们采用批处理的形式一键完成从修改时间到打开最后改回来的方法解决此问题 一、安装软件 解压缩两个安装包,进入 Rational Rose文件夹 选择setup.exe开始安装 按照图示依次点击

CoderJiang 2万+

消息队列 MQ

MQ(message queue),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是 message 而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ 是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了 MQ 之后,消息发送上游只需要依赖 MQ,不用依赖其他服务。

时间如瑾 代码如诗 1637

基于Plecs的LLC谐振变换器闭环设计:从PI参数整定到动态响应优化

本文详细介绍了在Plecs仿真环境中,如何为半桥LLC谐振变换器设计并优化闭环控制系统。从开环模型搭建与特性分析入手,重点阐述了基于频域法的PI控制器参数整定流程,并通过负载阶跃、输入电压突变等测试优化动态响应。文章还分享了从仿真模型过渡到实际硬件时的关键注意事项,帮助工程师实现稳定、高效的电源设计。

e4f5g6h的博客 624

消息队列MQ

MQ,RocketMQ

qq_56486237的博客 1275

Allegro Design Entry HDL(OrCAD Capture HDL)原理图是设计快速入门图文教程

Allegro Design Entry HDL是Cadence公司开发的原理图设计工具,也可与Allegro PCB设计工具无缝对接,虽然板级开发中不如Design Entry CIS(又名 OrCAD Capture CIS)的使用那么广泛,但是由于Design Entry HDL支持芯片的开发,所以有不少公司尤其是芯片背景公司,选择使用Design Entry HDL进行原理图设计。两个原理图开发工具的使用方法大同小异,本文简单介绍使用Allegro Design Entry HDL开始一个新的设计,

fydar的博客 4120

Modelsim:LPDDR5仿真(含美光仿真模型官方sv&vcs代码)

虽然,三星在设计跟量产上,早于其他家存储产商,但是镁光后来居上了,是业界首家支持全速 LPDDR5 的供应商,并且开发者在做开发的时候,也是用美光颗粒比较多,所以这里就先以美光的仿真模型为主进行仿真。 本工程为美光官方工程,支持Modelsim、VCS、ncverilog三种仿真器仿真。模型破解过,为完整system-verilog代码。

千歌叹尽执夏的博客 1281

消息队列(MQ)

定义消息队列:一般我们会简称它为MQ(Message Queue)。Message Query(MQ),消息队列中间件,很多初学者认为,MQ通过消息的发送和接受来实现程序的异步和解耦,mq主要用于异步操作,这个不是mq的真正目的,只不过是mq的应用,mq真正的目的是为了通讯。他屏蔽了复杂的通讯协议,像常用的dubbo,http协议都是同步的。这两种协议很难实现双端通讯,A调用B,B也可以主动调用A,而且不支持长连接。mq做的就是在这些协议上构建一个简单协议——生产者、消费者模型,mq带给我们的不是底层的通讯

m0_52012606的博客 2934

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

MQ消息队列详解

记录学习过程

毛豆的博客 7487

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【消息队列】MQ 是什么?为什么用MQ?怎么实现MQ?

消息队列(MQ) 是一种在分布式系统中,用于在应用程序之间传递消息的通信机制。消息队列的实现可以是基于代理的,也可以是基于发布/订阅模式的。选择适当的消息队列系统和模型取决于应用程序的需求。开源的消息中间件,实现了Java Message Service(JMS)。内存数据库,可以用作消息队列的代替品,支持发布/订阅模式。开源的消息队列系统,实现了高级消息队列协议(AMQP)。分布式流处理平台,支持高吞吐量的分布式消息系统。亚马逊提供的托管消息队列服务,适用于云环境。持续更新,关注,后续更精彩哦~

代码的魅力,根本走不出来 3046

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

POSIX 消息队列:mq_close vs mq_unlink

以(如 Linux 的实现)为例,释放消息队列的引用(mq_close)和清除消息队列(mq_unlink)是mq_close。

m0_56508437的博客 1243

消息队列MQ概述

1、MQ简介 MQ,Message Queue,是一种提供消息队列服务的中间件,也称为消息中间件,是一套提供了消息生 产、存储、消费全过程API的软件系统。消息即数据。一般消息的体量不会很大。 2、MQ用途 限流削峰 MQ可以将系统的超量请求暂存其中,以便系统后期可以慢慢进行处理,从而避免了请求的丢失或系统被压垮。 异步解耦 上游系统对下游系统的调用若为同步调用,则会大大降低系统的吞吐量与并发度,且系统耦合度太高。而异步调用则会解决这些问题。所以两层之间若要实现由同步到异步的转化,一般性做法就是,在这两

Logan的博客 3113

mq消息队列到底是什么

很多人 不知道 mq 到底干嘛的 那么 就以自己理解说一下 到底什么是mq 为什么会需要消息队列(MQ)? 按照业务场景 也就是 : 当有大量的 insert update 语句 去请求mysql 可能 直接导致无数 行锁 表锁 甚至最后请求会堆积过多,从而触发too many connections错误。 通过使用消息队列,我们可以异步处理请求,从而缓解系统的压...

释怀Na 3579

MQ 消息队列

MQ入门,初步了解MQ的概念

weixin_65436454的博客 1273

消息队列MQ简介

协议:是在 tcp/ip协议基础之上构建的一种约定成俗的规范和机制、它的主要目的可以让客户端(应用程序 java,go)进行沟通和通讯。并且这种协议下规范必须具有持久性,高可用,高可靠的性能。发布订阅:只要订阅了,就都可以收到中间件推的消息。比如 100条,三个服务器,每个人都会收到 100条。轮询分发:无论服务器的性能如何,都会公平收到消息,没有数据的倾斜,不可重复消费。比如 100条,三台服务器,每个人分到 33条,剩下一条随机给其中的一台服务器。

Eris_QwQ的博客 1121
上一篇: 三无真香级浏览器——Alook
下一篇: 这可能是最全面的RocketMQ安装指南
Hugh Pro
博客等级 码龄16年 6粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值