MQ是什么

目录

MQ是什么

MQ全称为Message Queue,也就是消息队列,是应用程序和应用程序之间的通信方法。
在微服务盛行的当下,MQ被使用的也是越来越多,一般常用来进行「业务异步解耦」、「解耦微服务」、「流量削峰填谷」、「消息分发」、「分布式事务的数据一致性」,我们分别来看一下。

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

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

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

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

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

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

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

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

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

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

Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。
目前主流的MQ框架,都支持分布式事务消息,好多小伙伴可能在初次接触的时候,会很有疑惑,到底是如何保证事务一致性的呢?下图来自阿里云,说的很明白,有点复杂的流程图,静下心来看或者略过不看

事务消息发送步骤如下:

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

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

猜你喜欢

转载自blog.csdn.net/qq_43806430/article/details/129809198