消息队列是个啥 ?

Posted Java后端

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了消息队列是个啥 ?相关的知识,希望对你有一定的参考价值。

作者 | ithuangqing

来源 | 编码之外(ID:ithuangqing)

今天,我们一起来看看,消息队列是个啥?

消息队列是否了解

消息队列初步来看,是由“消息”和“队列”组成,英文叫做:Message Queue,一般这些玩意都会根据英文名称来个简称,而简称一般就是英文名字的首字母缩写,所以消息队列即MQ。

可能你对消息队列有点陌生,但是你一定听过消息队列四个字,而且还会听过或者在其他地方见过比如RabbitMQ,还有RocketMQ,如果这些你都没听过,那你一定听过Kafka吧,这些知识可能在你那里都是高大上的概念,自己觉得目前还学不来这些知识……

所以,我觉得应该有相当一部分只是听过这些名字,但是仅仅而已,再多一点的信息可能就不知道了,那么从现在开始,跟随庆哥,一起来学习消息队列吧,同样的,庆哥会用大白话给你讲解这些晦涩难懂的概念与技术。

中间件是否了解

其实消息队列属于一种中间件,这个中间件,我想大部分应该也听过,但是也不太清楚是个什么玩意,其实吧,在编程世界里啊,很多解决不了的问题,都可以加个中间件来搞定,中间件,名字已经很直白了,就是相当于一个桥梁,比如A与B有直接关系,但是现在A和B之间引入了一个c,那么c就可以看做一个中间件,A和B依然可以通信,只不过不是直接通信,要借助c来实现了,画个图,简单的就是这样:

消息队列是个啥 ?

而消息队列就是属于一种中间件,充当了一个桥梁作用, 相当于在原有的基础之上强塞了一个玩意过去,以后原有的需要做些什么,可能就要经过这个新来的中间件了。

消息队列到底是个啥?

那消息队列有啥用嘞?以上,我们知道了消息队列是个中间件,哪还有啥嘞?就知道个中间件也不起作用啊,还是对消息队列一脸懵逼吧,想要搞定消息队列是个啥?我们得从字面意思上去拆解,首先,什么是消息你知道吗?

消息这个不多说, 属于不言而喻的东西,那么啥是队列,这个可能就有人不清楚了,不过不用担心,我之前特意写过一篇讲解队列的文章,你可以去看看:轻轻松松学会栈和队列(附有顺序栈的实现思路分析)

加入你已经看了这篇文章了,也许现在你已经知道了啥是队列,我相信,你知道的依旧是个概念,也就是队列的那些特点啥的,比如是个数据结构啊,什么先进先出啊,有什么队头和队尾之嘞的。

这些都是概念性的问题,如果你是第一次接触队列的话,我相信,你内心还是迷茫的,这都是啥啊,你可能会问。

其实吧,队列是属于一种数据结构,数据结构这玩意刚开始学习很玄学,不知道所以然,数据结构其实就是在告诉你,数据该怎么进行存储,按照一些特定的规则以及方式去储存数据,简单来说这就是数据结构在做的事情。

就拿数组来说,如果你需要用数组的话,那么实际上就是取内存申请了一段连续的内存空间,这个连续就是一个特点,要求你这些数据必须连续存储在这些内存中……

队列其实也是一样,说到底,就是告诉你怎么在内存中存储数据,记住这个先,那消息队列,也是这样,很直白的按照字面意思理解,就是存储消息的队列,所以啊,消息队列就是用来存储信息,然后其他可以从它这获取信息。

所以记住,消息队列:消息收发,通信

这么一看,消息队列好像就起到了一个通信的作用?当然不是,通信只是一部分,它所起到的作用绝对不仅仅如此。

我上面说了这么多,其实就是在跟你掰扯,消息队列是啥?不知道你清楚了没有,如果别人问你,知道消息队列吗?你必须回答,知道啊,消息队列,是一种中间件,进行消息的收发,可以解决一些通信问题……

当然,你这样回答远远不够,你还必须知道以下这些关于消息队列的知识。

有哪些消息队列

首先你得知道,消息队列MQ是一个统称,具体的有不同的产品,啥意思咧,就比如说水果,那还包括香蕉和苹果嘞,所以,消息队列有好几种嘞,我这里说几种当下比较流行的,其实也就三种:

  1. RabbitMQ
  2. RocketMQ
  3. Kafka
这三种,上面也简单提过,可能你们也听说过,只是没有具体的去学习过,那么从现在开始,也就是看了我这次的分享这后,别人再问起消息队列,最起码你能够把这三个给说出来,并且还能对他们挨个做下介绍。

RabbitMQ

这个消息队列比较老牌了,这个俗称兔子MQ,至于为啥这样说,你应该知道。
RabbitMQ在一开始是很强势的,也就是曾经很辉煌,当然,现在也不赖,只不过由于一些后起之秀,光芒不胜从前了,毕竟后来的也很优秀,RabbitMQ它的特点你需要记住:
  1. 开箱即用
  2. 轻量级
  3. 易于部署和使用
  4. 支持灵活的路由配置
  5. 客户端支持的编程语言是最多的(至少目前是)
  6. ……
知道以上几个就差不多了,当然,你还得知道RabbitMQ的几个不好地方:
  1. 使用Erlang语言编写(这是个啥语言我之前真不知道,这就导致一个大问题,想要二次开发与扩展,以及遇到问题的话,解决的成本都比较高啊)
  2. 对消息堆积支持的不友好(消息队列就是进行消息收发的啊,大量的消息扔进RabbitMQ的话,它的性能表现就不那么好了)
  3. 性能相比较RocketMQ和Kafka是最差的
关于RabbitMQ,你目前就需要知道这些就行了,因为每一种消息队列产品都是值得我们单独花时间学习和研究的,所以这里我们肯定介绍不了那么多,这个以后会单独学习他们,到那时候再分享。

RocketMQ

这个就比较牛了,好像现在差不多都在用这个吧,不过还是分场景吧,不同的应用场景应该选择不同的消息队列,RocketMQ属于明星产品啊,它是阿里巴巴搞出来的,后来捐赠给了Apache基金会,2017年成了其顶级项目,阿里内部也是使用的它。
可以说,RocketMQ是一款综合变现都很不错的消息队列产品,无论是性能还是稳定性,亦或是可靠性,RocketMQ表现的都很不错,反正吧,这家伙是越来越首欢迎了。
那么咱们来看看它的一些特点吧:
  1. 用java语言开发,好处多多啊
  2. 响应时延这块优化的很好(就是响应时间优化的很短)
  3. 性能优越,比兔子MQ好
那要说它有什么不好的地方,那可能就是因为它是我们国人开发的,在于世界上其他优秀的产品协作的时候,集成和兼容性问题上可能有点不足,不过啊,这算得上是问题吗?

以上是关于消息队列是个啥 ?的主要内容,如果未能解决你的问题,请参考以下文章

消息队列是什么?

消息队列以及非常牛的kafka

白话MQTT是个啥

C# 使用 RabbitMq 队列

MQTT 协议是个啥?这篇文章告诉你!

消息队列面试场景