把 4个消息队列都拉到一个群里后,他们吵起来了
共 1948字,需浏览 4分钟
·
2020-10-21 21:58
从事软件开发的同学,一定都听过或用过消息队列,比如 RabbitMQ,Kafka。消息队列简单来说就是生产者将很多消息放到一个队列结构中,由其他消费者来消费。想了解更多队列
的知识,看下我之前写的 18 个 Queue 的文章,保证整的明明白白。传送门:45张图庖丁解牛18种Queue。
那如果把常见的四大消息队列拉到一个群里,会碰出哪些火花呢?
被嫌弃
四大队列被中间件大队长
拉到了一个群里面。
群名:悟空聊架构群。
成员数:25 个。
管理员:中间件大队长。
群主:神秘悟空哥。
大家来感受下他们的聊天界面吧~
???
RabbitMQ 单独找中间件大队长聊天的画面。
涉及的故事:
Erlang 是啥? 并非一门新语言,出现于 1987 年。并不是面向对象语言。 函数式编程,基于进程并发,高并发、分布式是它的优势。 由爱立信制造商专门为通信应用设计,在国内主要是游戏领域用到。 Erlang 为啥会被其他队列嫌弃? 因为 RocketMQ、ActiveMQ 都是用 Java 实现的,Kafka 是用 Scale 和 Java 实现的,这三种消息队列从语言实现上都有些类似。 在国内现如今超流行的 Java 的技术生态中,懂 Java 又懂 Erlang 的就比较少了,愿意花时间和精力在 Erlang 上面的就更少了。
快和慢
涉及的故事:
他们讨论的低延迟是啥? 就是说这个消息队列的响应速度是非常快的,比如插入一条消息,可以很快的返回插入结果。可以理解为反射弧比较短。而RabbitMQ 的低延迟达到微秒级,而另外三个队列都是毫秒级。 他们讨论的吞吐量是啥? 吞吐量:系统在单位时间内处理请求的数量。 RocketMQ 自称火箭,肯定是有他的道理的,因为他的处理请求的速度快呀!吞吐量可以达到 10 万级,而另外两个队列都是万级。
无界面 vs 社区别凉
他们聊的操作界面又是啥?
RabbitMQ、ActiveMQ、Kafka 都是有界面来操作队列或消息的,而 RocketMQ 就比较坑了, 只提供了命令行工具,这对于长期使用 windows 的用户确实很难受呀。
他们说的阿里出品又是啥?
RocketMQ 由大厂阿里出品,已捐给 Apache 开源社区,活跃度不算高,会不会没人修 bug 了? RabbitMQ 有活跃的开源社区,总能找到修 bug 的,你愿意用哪个?大厂推荐用 RocketMQ,可以自己折腾,小一点的还是用 RabbitMQ 吧,节省解决问题的成本。
mysql 的朋友圈
点开图片后查看大图,mysql 不会飞
的朋友圈如下:
中间件大队长
邀请 mysql 不会飞
进入了群聊。
涉及的故事:
消息队列常用在解耦、削峰、异步场景中。先对这几个点来个大白话扫盲:
悟空大白话削峰:关键词:「别都丢给我!」 比如双十一期间超多用户下单,假如 10万个请求都到数据库了,数据库一下子是扛不住这么多请求的,那么消息队列来解围,把请求丢到消息队列,订单服务从消息队列拿消息处理订单请求,起到了一个缓冲的作用,这样对数据库的压力就小多了。
悟空大白话解耦:关键词:「谁用谁拿」 。A 系统需要将数据传给 B、C、D、E 系统,A 系统时刻需要考虑 B、C、D、E 四个系统如果宕机了怎么办?要不要重发,要不要消息持久化存起来?A 系统要考虑的问题太多了,可把 A 系统累坏了。这就是一种高耦合的现象,BCDE 四个系统强依赖 A 系统。那怎么解耦?A 系统将数据丢到消息队列,BCDE 系统自己想要数据的时候就去消息队列里面拿。
悟空大白话异步:关键词:「先去忙你的吧~」 。比如下一笔订单,从订单支付到订单成功,这个闭环可能很长,比如要发送订单成功消息、赠送优惠券等等操作,用户等待的时间可能很久,用户体验就不好了,那怎么解决呢?可以将下单成功的消息丢到队列里面,快速返回订单成功,然后告知用户,消息触达系统再从队列里面拿到订单数据,依次给用户发送订单消息和优惠券就行了,这个就是异步。
消息队列的尴尬
如果对你有用,欢迎 在看、点赞、转发 ,您的认可是我最大的动力。
整理了几百本各类技术电子书,送给小伙伴们。关注公号回复【666】自行领取。和一些小伙伴们建了一个技术交流群,一起探讨技术、分享技术资料,旨在共同学习进步,如果感兴趣就加入我们吧!