深入浅出消息队列---1、消息队列概述-灵析社区

提笔写架构

消息队列介绍

消息队列(英语:Message queue)是一种进程间通信或同一进程的不同线程间的通信方式,软件的贮列用来处理一系列的输入,通常是来自用户。

消息队列提供了异步的通信协议,每一个贮列中的纪录包含详细说明的数据,包含发生的时间,输入设备的种类,以及特定的输入参数,也就是说:消息的发送者和接收者不需要同时与消息队列交互。消息会保存在队列中,直到接收者取回它。

消息队列应用场景:

  1. 异步处理:
      异步处理是将很多串行进行的步骤转成异步处理,还是已订单系统为例,下单订单需要创建订单和锁定库存,确定本次请求后马上给用户返回响应,然后把后续请求的数据的都在消息队列,由消息队列异步处理。
  2. 应用解耦:
      举例一下电商系统的中的订单系统。当创建一个订单时:发起支付、扣减库存、发消息告知用户、更新统计数据,这些订单下游的系统都需要实时获得订单数据,随着业务量的增大和业务的变更,有一段时间不需要发消息给客户,或者需要添加功能,每次都需要不断的调式订单系统和下游系统。
      引入消息队列后,订单服务在创建订单时发送一条信息到消息队列主题 Order 中,所有的下游都订阅主题Order,这样无论增加、减少下游系统还是下游系统的功能如何变化,订单服务都不需要做更改了,实现了订单服务和下游服务的解耦。

流量控制

  在购物网站的做一个秒杀活动,平时网站能支撑每秒1000次并发请求,但是电商秒杀一下请求猛增到每秒3000次请求,多出来的请求,可能直接让系统宕机。

所以我们就需要使用消息队列来控制流量,当系统短时间接收到大量请求时,会先将请求堆积到消息队列上,后端服务从消息队列上消费数据,消息队列相对于给后端服务做了一次缓冲。

常见消息队列

MQ相关的产品有:ActiveMQ,RabbitMQ,RocketMQ,Kafka,Zeromq。目前市面上常用的消息队列产品:RabbitMQ,

 Kafka,RocketMQ。因此我们首先来比对一下这几个MQ之前的差别:


 总结:

 1、一般的业务系统要引入MQ,最早大家都用ActiveMQ,但是现在确实大家用的不多了,没经过大规模吞吐量场景的验证,社区也不是很活跃。

 2、后来大家开始用RabbitMQ,但是erlang语言阻止了大量的java工程师去深入研究和掌控他,对公司而言,几乎处于不可控的状态。但由于是开源的,并且也比较稳定,活跃度也高,所以使用很广泛。

 3、现在很多的公司也开始使用RocketMQ,由于社区活跃度不高,资料比较少。所以学习成本比较大,因此要使用RocketMQ要考虑社区万一突然黄掉的风险。所以中小型公司,技术实力较为一般,技术挑战不是特别高,用RabbitMQ是不错的选择;大型公司,基础架构研发实力较强,用RocketMQ是很好的选择。

 4、如果是大数据领域的实时计算、日志采集等场景,用Kafka是业内标准的,绝对没问题,社区活跃度很高,绝对不会黄,何况几乎是全世界这个领域的事实性规范。

 下面章节,我们会主要来说下RabbitMQ和Kafka。

阅读量:1549

点赞量:0

收藏量:0