消息队列---MQ介绍


前言

实习之MQ学习历程


一、MQ是什么?

1.1基本概念

MQ全称Message Queue(消息队列),是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信(分布式系统:A、B两系统职责不一样,但是组合起来是一个大的系统,我们就称之为分布式系统)
分布式系统的通信问题:
有两种通信方式1.直接远程调用 2.发送者(生产者)发送给中间者(中间件),由中间者发送给接收者(消费者)。MQ属于第二种
在这里插入图片描述
在这里插入图片描述

1.2MQ的优势和劣势

优势

1.应用解耦
2.异步提速
3.削峰填谷

应用解耦

我们写代码都追求高内聚低耦合,因为耦合度降低了可维护性就提高了
在这里插入图片描述
由订单系统之间耦合三个子系统,会出现两个问题:
1.容错性低:列如库存系统产生异常导致库存系统挂掉,那么在用户下订单的时候整个链路走不通,可能导致订单系统出现问题
2. 可复用性低:例如要新增模块,那么只能在订单系统上修改

通过中间件解决直接通过远程调用的时带来得弊端
在这里插入图片描述

1.当用户发送订单给MQ,MQ就直接返回订单成功的响应 而后续的三个子系统只需要在MQ中把订单系统的数据拿出来,在自己的系统里去消费,从而把订单系统与三个子系统隔离起来了,子系统挂掉也没有关系,因为数据存在MQ中,只要子系统恢复以后,再从MQ中拿到数据执行,最终数据肯定正常,容错性提高
2.增加新模块 新模块也只用在MQ中拿数据 订单系统不需要改代码

异步提速

在这里插入图片描述

1.直接通过远程调用,会依次调用三个子系统,子系统没问题则存入数据库 耗时920ms

在这里插入图片描述

加入MQ中间件时,则只需要存入库操作与给MQ发送数据操作 就返回成功信息给前端,而三个子系统是否执行成功不影响,子系统再慢慢从mq拿数据执行 只需要消费25ms 提高了系统的吞吐量

削峰填谷

在这里插入图片描述

当请求远超A系统最大处理请求时,回导致A系统挂掉
在这里插入图片描述
当请求超过A系统最大请求时:因为用户对接的是MQ,然后A系统再慢慢从MQ拉取最大处理请求量处理请求 提高了系统的稳定性

劣势

1.系统可用性降低
系统引入的外部依赖越多,系统稳定性越差,一旦MQ宕机,就会对业务造成影响
2.系统复杂度提高
MQ的加入大大增加了系统的复杂度,以前系统间是同步的远程调用,现在是通过MQ进行异步调用,需要考虑消息有没有被重复消费,消息丢失,与顺序问题。
3.一致性问题
A系统处理完业务,通过MQ给子系统发消息数据,子系统有些处理成功有些失败,如何保证消息数据处理的一致性
在这里插入图片描述

二、常见的MQ产品

RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMQ等、Redis也可以直接充当消息队列
在这里插入图片描述

总结

使用MQ条件

1.生产者不需要从消费者处获取反馈,引入消息队列之前的直接调用,其接口的返回值应该为空,这才让明明下层的动作还没做,上层却当成动作做完了继续往后走,即所谓异步成为了可能
容许短暂的不一致性。
解耦、提速、削峰这些方面的收益超过加入MQ、管理MQ这些成本

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值