微学网

热门关键词:   as  thinkphp  ecshop  xxx  php分页  商务通
热门: ASP.NET PHP编程 ASP编程 JSP编程 Python

编码之外,一文搞懂什么是消息队列!

发布时间:2020-02-29 来源:未知 点击:
今天,我们一起来看看,消息队列是个啥?
 
消息队列是否了解?
消息队列初步来看,是由“消息”和“队列”组成,英文叫做:Message Queue,一般这些玩意都会根据英文名称来个简称,而简称一般就是英文名字的首字母缩写,所以消息队列即MQ。
 
可能你对消息队列有点陌生,但是你一定听过消息队列四个字,而且还会听过或者在其他地方见过比如RabbitMQ,还有RocketMQ,如果这些你都没听过,那你一定听过Kafka吧,这些知识可能在你那里都是高大上的概念,自己觉得目前还学不来这些知识……
 
所以,我觉得应该有相当一部分只是听过这些名字,但是仅仅而已,再多一点的信息可能就不知道了,那么从现在开始,跟随庆哥,一起来学习消息队列吧,同样的,庆哥会用大白话给你讲解这些晦涩难懂的概念与技术。
 
中间件是否了解
其实消息队列属于一种中间件,这个中间件,我想大部分应该也听过,但是也不太清楚是个什么玩意,其实吧,在编程世界里啊,很多解决不了的问题,都可以加个中间件来搞定,中间件,名字已经很直白了,就是相当于一个桥梁,比如A与B有直接关系,但是现在A和B之间引入了一个c,那么c就可以看做一个中间件,A和B依然可以通信,只不过不是直接通信,要借助c来实现了,画个图,简单的就是这样:
 
 
而消息队列就是属于一种中间件,充当了一个桥梁作用, 相当于在原有的基础之上强塞了一个玩意过去,以后原有的需要做些什么,可能就要经过这个新来的中间件了。
 
消息队列到底是个啥?
那消息队列有啥用嘞?以上,我们知道了消息队列是个中间件,哪还有啥嘞?就知道个中间件也不起作用啊,还是对消息队列一脸懵逼吧,想要搞定消息队列是个啥?我们得从字面意思上去拆解,首先,什么是消息你知道吗?
 
消息这个不多说, 属于不言而喻的东西,那么啥是队列,这个可能就有人不清楚了,不过不用担心,我之前特意写过一篇讲解队列的文章,你可以去看看:轻轻松松学会栈和队列(附有顺序栈的实现思路分析)
 
加入你已经看了这篇文章了,也许现在你已经知道了啥是队列,我相信,你知道的依旧是个概念,也就是队列的那些特点啥的,比如是个数据结构啊,什么先进先出啊,有什么队头和队尾之嘞的。
 
这些都是概念性的问题,如果你是第一次接触队列的话,我相信,你内心还是迷茫的,这都是啥啊,你可能会问。
 
其实吧,队列是属于一种数据结构,数据结构这玩意刚开始学习很玄学,不知道所以然,数据结构其实就是在告诉你,数据该怎么进行存储,按照一些特定的规则以及方式去储存数据,简单来说这就是数据结构在做的事情。
 
就拿数组来说,如果你需要用数组的话,那么实际上就是取内存申请了一段连续的内存空间,这个连续就是一个特点,要求你这些数据必须连续存储在这些内存中……
 
队列其实也是一样,说到底,就是告诉你怎么在内存中存储数据,记住这个先,那消息队列,也是这样,很直白的按照字面意思理解,就是存储消息的队列,所以啊,消息队列就是用来存储信息,然后其他可以从它这获取信息。
 
总结的说,消息队列是进行消息的收发,可以起到一个通信的作用,毕竟消息是可以传递信息的,你打个电话,发个短信,这都是在传递信息啊,这不都是通信嘛,这个应该不难理解!
 
所以记住,消息队列:消息收发,通信
 
这么一看,消息队列好像就起到了一个通信的作用?当然不是,通信只是一部分,它所起到的作用绝对不仅仅如此。
 
我上面说了这么多,其实就是在跟你掰扯,消息队列是啥?不知道你清楚了没有,如果别人问你,知道消息队列吗?你必须回答,知道啊,消息队列,是一种中间件,进行消息的收发,可以解决一些通信问题……
 
当然,你这样回答远远不够,你还必须知道以下这些关于消息队列的知识。
 
有哪些消息队列
首先你得知道,消息队列MQ是一个统称,具体的有不同的产品,啥意思咧,就比如说水果,那还包括香蕉和苹果嘞,所以,消息队列有好几种嘞,我这里说几种当下比较流行的,其实也就三种:
 
RabbitMQ
RocketMQ
Kafka
这三种,上面也简单提过,可能你们也听说过,只是没有具体的去学习过,那么从现在开始,也就是看了我这次的分享这后,别人再问起消息队列,最起码你能够把这三个给说出来,并且还能对他们挨个做下介绍。
 
RabbitMQ
这个消息队列比较老牌了,这个俗称兔子MQ,至于为啥这样说,你应该知道。
 
RabbitMQ在一开始是很强势的,也就是曾经很辉煌,当然,现在也不赖,只不过由于一些后起之秀,光芒不胜从前了,毕竟后来的也很优秀,RabbitMQ它的特点你需要记住:
 
开箱即用
轻量级
易于部署和使用
支持灵活的路由配置
客户端支持的编程语言是最多的(至少目前是)
……
知道以上几个就差不多了,当然,你还得知道RabbitMQ的几个不好地方:
 
使用Erlang语言编写(这是个啥语言我之前真不知道,这就导致一个大问题,想要二次开发与扩展,以及遇到问题的话,解决的成本都比较高啊)
对消息堆积支持的不友好(消息队列就是进行消息收发的啊,大量的消息扔进RabbitMQ的话,它的性能表现就不那么好了)
性能相比较RocketMQ和Kafka是最差的
关于RabbitMQ,你目前就需要知道这些就行了,因为每一种消息队列产品都是值得我们单独花时间学习和研究的,所以这里我们肯定介绍不了那么多,这个以后会单独学习他们,到那时候再分享。
 
RocketMQ
这个就比较牛了,好像现在差不多都在用这个吧,不过还是分场景吧,不同的应用场景应该选择不同的消息队列,RocketMQ属于明星产品啊,它是阿里巴巴搞出来的,后来捐赠给了Apache基金会,2017年成了其顶级项目,阿里内部也是使用的它。
 
可以说,RocketMQ是一款综合变现都很不错的消息队列产品,无论是性能还是稳定性,亦或是可靠性,RocketMQ表现的都很不错,反正吧,这家伙是越来越首欢迎了。
 
那么咱们来看看它的一些特点吧:
 
用java语言开发,好处多多啊
响应时延这块优化的很好(就是响应时间优化的很短)
性能优越,比兔子MQ好
那要说它有什么不好的地方,那可能就是因为它是我们国人开发的,在于世界上其他优秀的产品协作的时候,集成和兼容性问题上可能有点不足,不过啊,这算得上是问题吗?
这就是微学网-程序员之家为你提供的"编码之外,一文搞懂什么是消息队列!"希望对你有所帮助.

凡本网站转载的文章、图片等资料的版权归版权所有人所有,因无法和版权所有者一一联系,如果本网站选取的文/图威胁到您的权益,请您及时和本网站联系。 我们会在第一时间内采取措施,避免给双方造 成不必要的损失。
© 2015-2018 微学网 版权所有,并保留所有权利。 备案号:粤ICP备09051474号-1

电脑版 | 移动版