目录
1 消息队列MQ
1.1 MQ简介
1、什么是MQ
MQ全称是Message Queue,直译过来叫做消息队列。MQ本质上是一个队列,遵循先进先出的原则,而队列存放内容为message,主要是作为分布式应用之间实现异步通信的方式。是一种跨进程的通信机制,用于上下游传递消息。
它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。现在主流的消息队列有:ActiveMQ、RabbitMQ,Kafka,RocketMQ等。
2、MQ的优势
流量削峰
流量消峰:当流量超过处理上限时,正常情况下,超过上限的流量不做处理。而MQ可以把多出来的一部分流量放入消息队列做缓冲。
举个例子:假设某订单系统每秒最多能处理一万次订单,也就是最多承受的10000qps,正常情况下,下单一秒后就能返回结果。但是在高峰期,如果有两万次下单操作,系统是处理不了的,只能限制订单超过一万后不允许用户下单。如果使用消息队列做缓冲,则可以取消这个限制,把一秒内下的订单分散成一段时间来处理,这时有些用户还可以下单但是可能会在十几秒后才能收到下单成功的操作,返回结果会有一段时间的延迟但是仍可以进行下单操作。

应用解耦
以电商应用为例,应用中有订单系统、库存系统、物流系统、支付系统。
耦合:用户创建订单后,如果耦合调用库存系统、物流系统、支付系统,任何一个子系统出了故障,都会造成下单操作异常。
加入MQ后:当转变成基于消息队列的方式后,系统间调用的问题会减少很多,比如物流系统因为发生故障,需要几分钟来修复。在这几分钟的时间里,物流系统要处理的内存被缓存在消息队列中,用户的下单操作可以正常完成。当物流系统恢复后,继续处理订单信息即可,中单用户感受不到物流系统的故障,提升系统的可用性。

异常处理
有些服务间调用是异步的,例如 A 调用 B,B 需要花费很长时间执行,但是 A 需要知道 B 什么时候可以执行完,以前一般有两种方式:1)A 过一段时间去调用 B 的查询 api 查询;2)A 提供一个 callback api, B 执行完之后调用 api 通知 A 服务。
以上两种方式都不是很优雅,使用消息队列,可以很方便解决这个问题:A 调用 B 服务后,只需要监听 B 处理完成的消息,当 B 处理完成后,会发送一条消息给 MQ,MQ 会将此消息转发给 A 服务。这样 A 服务既不用循环调用 B 的查询 api,也不用提供 callback api。同样B 服务也不用做这些操作,A 服务还能及时的得到异步处理成功的消息。

数据分发
MQ支持发布订阅机制。支持上下游的一对一、一对多、或者广播模式,并且都可以根据规则选择分发的对象。这样一份上游数据,众多下游系统中,可以根据规则来选择是否接收这些数据。

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



