消息队列(英语:Message queue)是一种进程间通信或同一进程的不同线程间的通信方式,软件的贮列用来处理一系列的输入,通常是来自用户。
消息队列提供了异步的通信协议,每一个贮列中的纪录包含详细说明的数据,包含发生的时间,输入设备的种类,以及特定的输入参数,也就是说:消息的发送者和接收者不需要同时与消息队列交互。消息会保存在队列中,直到接收者取回它。
消息队列应用场景:
流量控制
在购物网站的做一个秒杀活动,平时网站能支撑每秒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