为什么要用队列消息(MQ)

消息队列(MQ)是什么?

消息队列中间件是分布式系统中重要的组件(单机版也可用:单机版指的是在服务器上安装),主要解决应用耦合,异步消息,流量削锋等问题。

实现高性能,高可用,可伸缩和最终一致性架构。

使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ。

消息队列,一般我们会简称它为MQ(Message Queue)

名词解释

  • 把数据放到(push)消息队列叫做生产者
  • 从消息队列里边取(get)数据叫做消费者

为什么要用MQ?

这三个场景也是消息队列的经典场景,大家基本上要烂熟于心那种,就是一说到消息队列你脑子就要想到异步削峰解耦,条件反射那种。

异步

这个异步的概念可能和Task这个异步不太一样。微软定义的异步(打个比方,你要烧水,扫地,用异步就是把水烧上的同时可能进行扫地)

你要是理解上面的mq是用来干嘛的那就很好理解这个异步是什么意思

再打个比方下单的流程一般就是提交订单接口中有支付,像图片中第一个流程,本来下单就用50ms(Response-Time响应时间),但是到后面的话就用单200ms。如果是放到消息队列里面,他发短信,扣优惠券,积分抵扣等一会在处理也行。(网上样图见后两张)

图片[1]-为什么要用队列消息(MQ)-时光博客网
图1
图片[2]-为什么要用队列消息(MQ)-时光博客网
图2
图片[3]-为什么要用队列消息(MQ)-时光博客网
图3

削峰/限流

比如每周会有一次限时抢购的活动,活动刚开始的时候就会有打部分的用户,造成高并发,倘若系统一次只能让500个人同时进来,用户有2000个同时进来,不可能不让用户进来吧,同时进来的话就会给服务器造成压力,甚至宕机(关机-停止服务)。

解决办法就用到了消息队列,消息队列有一个原则,先进先出(像去超市买东西结账排队一样)。这样的话就处理ok了


解耦

公司有几个系统A,B,C,D,A系统有一个字符串(你可以理解为有一个东西),供B,C系统调用,你用代码实现,直接调用B,C系统的方法,讲参数给传递过去;

过来几天,老大说,B不用这个字符串了,管理A系统的人改改代码完成了,去掉了调用的方法,有过几天B系统又用这个字符串了,你有重新调用,但一天过去了,需求不断更改。

管理A系统的人跑路了,后面来个大佬,直接新定义,你B,C,D那个系统用这个字符串,你直接去MQ(消息队列里面去拿),然后就不用管B,C,D他用不用这个东西。

图片[4]-为什么要用队列消息(MQ)-时光博客网
图4
图片[5]-为什么要用队列消息(MQ)-时光博客网
图5
图片[6]-为什么要用队列消息(MQ)-时光博客网
图6
图片[7]-为什么要用队列消息(MQ)-时光博客网
图7

用到分布式的话,后面还有好多坑。

  1. 如何保证队列消息高可用(比如队列消息挂了)
  2. 分布式如何处理
  3. 数据是否持久化保存
© 版权声明
THE END
喜欢就支持一下吧
点赞12赞赏 分享
评论 抢沙发

请登录后发表评论