目录

一、概述   

       什么是消息中间件?

二、消息队列的使用场景  

       为什么使用消息队列?

       消息队列有什么优缺点?

三、目前流行的消息队列优缺点对比

四、总结     

一、概述

什么是消息中间件?

消息队列中间件(简称消息中间件)是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下提供应用解耦、弹性伸缩、冗余存储、流量削峰、异步通信、数据同步等等功能,其作为分布式系统架构中的一个重要组件,有着举足轻重的地位。个人感觉比价场景应用核心的有三个:解耦、异步、削峰。

二、消息队列的使用场景

为什么使用消息队列?

其实这个话题也是面试官经常问询的问题,问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队列是什么

期望的一个回答是说,你们公司有个什么业务场景,这个业务场景有个什么技术挑战,如果不用MQ可能会很麻烦,但是你现在用了MQ之后带给了你很多的好处

现在你可以下想想你如何回答上述问题,想不起来?  好吧我这里先介绍几个常见使用场景,提醒下。。。

解耦:现场画个图来说明一下,

A系统发送个数据到BCD三个系统,接口调用发送,那如果E系统也要这个数据呢?那如果C系统现在不需要了呢?现在A系统又要发送第二种数据了呢?A系统负责人濒临崩溃中。。。再来点更加崩溃的事儿,A系统要时时刻刻考虑BCDE四个系统如果挂了咋办?我要不要重发?我要不要把消息存起来?头发都白了啊。。。

这是你需要去考虑一下你负责的系统中是否有类似的场景,就是一个系统或者一个模块,调用了多个系统或者模块,互相之间的调用很复杂,维护起来很麻烦。但是其实这个调用是不需要直接同步调用接口的,如果用MQ给他异步化解耦,也是可以的,你就需要去考虑在你的项目里(做过微服务项目的同学这里是不是考虑下  消息总线 搭配Rabbitmq 做解耦 用于广播配置文件的更改或者服务间的通讯?),是不是可以运用这个MQ去进行系统的解耦。在简历中体现出来这块东西,用MQ作解耦。

异步:现场画个图来说明一下,

A系统接收一个请求,需要在自己本地写库,还需要在BCD三个系统写库,自己本地写库要3ms,BCD三个系统分别写库要300ms、450ms、200ms。最终请求总延时是3 + 300 + 450 + 200 = 953ms,接近1s,用户感觉搞个什么东西,慢死了慢死了。

更改为 异步后当消息发送到消息队列  自行让对应系统进行消费即可  所以给用户的体验为20 + 5 = 25ms  ,快 好快!

削峰:每天0点到11点,A系统风平浪静,每秒并发请求数量就100个。结果每次一到11点~1点,每秒并发请求数量突然会暴增到1万条。但是系统最大的处理能力就只能是每秒钟处理1000个请求啊。。。尴尬了,系统会死。。。

消息队列有什么优缺点?

优点上面已经说了,就是在特殊场景下有其对应的好处,解耦、异步、削峰

缺点呢?显而易见的

系统可用性降低:系统引入的外部依赖越多,越容易挂掉,本来你就是A系统调用BCD三个系统的接口就好了,人ABCD四个系统好好的,没啥问题,你偏加个MQ进来,万一MQ挂了咋整?MQ挂了,整套系统崩溃了,你不就完了么。

系统复杂性提高:硬生生加个MQ进来,你怎么保证消息没有重复消费?怎么处理消息丢失的情况?怎么保证消息传递的顺序性?头大头大,问题一大堆,痛苦不已

一致性问题:A系统处理完了直接返回成功了,人都以为你这个请求就成功了;但是问题是,要是BCD三个系统那里,BD两个系统写库成功了,结果C系统写库失败了,咋整?你这数据就不一致了。

所以消息队列实际是一种非常复杂的架构,你引入它有很多好处,但是也得针对它带来的坏处做各种额外的技术方案和架构来规避掉,最好之后,你会发现,妈呀,系统复杂度提升了一个数量级,也许是复杂了10倍。但是关键时刻,用,还是得用的。。。

目前流行的消息队列优缺点对比

kafka、activemq、rabbitmq、rocketmq都有什么优点和缺点啊?

常见的MQ其实就这几种,别的还有很多其他MQ,但是比较冷门的,那么就别多说了

作为一个码农,你起码得知道各种mq的优点和缺点吧,咱们来画个表格看看

综上所述,各种对比之后,总结如下:

一般的业务系统要引入MQ,最早大家都用ActiveMQ,但是现在确实大家用的不多了,没经过大规模吞吐量场景的验证,社区也不是很活跃,所以大家还是算了吧,我个人不推荐用这个了;

后来大家开始用RabbitMQ,但是确实erlang语言阻止了大量的java工程师去深入研究和掌控他,对公司而言,几乎处于不可控的状态,但是确实人是开源的,比较稳定的支持,活跃度也高;

不过现在确实越来越多的公司,会去用RocketMQ,确实很不错,但是我提醒一下自己想好社区万一突然黄掉的风险,对自己公司技术实力有绝对自信的,我推荐用RocketMQ,否则回去老老实实用RabbitMQ吧,人是活跃开源社区,绝对不会黄

所以中小型公司,技术实力较为一般,技术挑战不是特别高,用RabbitMQ是不错的选择(我们项目也正在使用这个^_^);大型公司,基础架构研发实力较强,用RocketMQ是很好的选择

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

转自:https://blog.csdn.net/java_zyq/article/details/80022391

转载于:https://www.cnblogs.com/itplay/p/10642533.html

【选型】消息中间件选型相关推荐

  1. 消息中间件选型分析 —— 从 Kafka 与 RabbitMQ 的对比来看全局

    一.前言 二.各类消息队列简述 三.选型要点概述 四.消息中间件选型误区探讨 一.前言 消息队列中间件(简称消息中间件)是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布 ...

  2. 消息中间件选型分析——从Kafka与RabbitMQ的对比来看全局

    本文收录于InfoQ,未经允许不得转载. 欢迎跳转到本文原文:https://honeypps.com/mq/kafka-vs-rabbitmq/ 一.前言 消息队列中间件(简称消息中间件)是指利用高 ...

  3. kafka消息消费有延迟_消息中间件选型分析---从Kafka与RabbitMQ的对比来看全局

    有很多网友留言:公司要做消息中间件选型,该如何选?你觉得哪个比较好?消息选型的确是一个大论题,实则说来话长的事情又如何长话短说.对此笔者专门撰稿一篇内功心法:如何看待消息中间件的选型,不过这篇只表其意 ...

  4. activemq消息丢失_Kafka or RabbitMQ:消息中间件选型深入分析

    消息中间件选型深入分析 --从Kafka与RabbitMQ的对比来看全局 有很多网友留言:公司要做消息中间件选型,该如何选?你觉得哪个比较好?消息选型的确是一个大论题,实则说来话长的事情又如何长话短说 ...

  5. Kafka or RabbitMQ:消息中间件选型深入分析

    一.前言 消息队列中间件(简称消息中间件)是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成.通过提供消息传递和消息排队模型,它可以在分布式环境下提供应用解耦 ...

  6. 消息中间件---选型分析

    消息中间件选型分析 --从Kafka与RabbitMQ的对比来看全局 有很多网友留言:公司要做消息中间件选型,该如何选?你觉得哪个比较好?消息选型的确是一个大论题,实则说来话长的事情又如何长话短说.对 ...

  7. 【十一】消息中间件选型分析——从Kafka与RabbitMQ的对比来看全局

    转载:消息中间件选型分析--从Kafka与RabbitMQ的对比来看全局 一.前言 消息队列中间件(简称消息中间件)是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系 ...

  8. 消息中间件选型分析:从 Kafka 与 RabbitMQ 对比

    一.前言 消息队列中间件(简称消息中间件)是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成.通过提供消息传递和消息排队模型,它可以在分布式环境下提供应用解耦 ...

  9. IM系统的MQ消息中间件选型:Kafka还是RabbitMQ?

    1.前言 在IM这种讲究高并发.高消息吞吐的互联网场景下,MQ消息中间件是个很重要的基础设施,它在IM系统的服务端架构中担当消息中转.消息削峰.消息交换异步化等等角色,当然MQ消息中间件的作用远不止于 ...

  10. 分布式技术与实战第五课 分布式-消息中间件选型

    第26讲:消息队列有哪些应用场景? 分布式系统不同模块之间的通信,除了远程服务调用以外,消息中间件是另外一个重要的手段,在各种互联网系统设计中,消息队列有着广泛的应用.从本课时开始,专栏进入分布式消息 ...

最新文章

  1. java getservername_Tomcat:getHeader(“主机”)与getServerName()
  2. powerdesigner箭头如何画_用Scratch编程画几何图形:如何画多边形
  3. 基于 Android NDK 的学习之旅-----序言
  4. c语言 段位,C语言 段位
  5. 每天拿起手机100次,使用7小时?iOS 12告诉你时间都去哪儿了
  6. 如何删除尾随换行符?
  7. Linux安装redis(6.0.9)环境
  8. python笔记27:数据分析之交叉分析
  9. python中response对象的方法_django HttpResponse对象 - 刘江的django教程
  10. 常见的电子元器件分类介绍
  11. 独立的荣耀将首次与华为打擂台,谁的折叠手机更有优势?
  12. 自定义UDF函数:将汉字转换成拼音
  13. 【CS231n assignment 2022】Assignment 2 - Part 1,全连接网络的初始化以及正反向传播
  14. Android多人视频聊天应用的开发(一)快速集成
  15. 判断两个单链表是否相交及找到第一个交点
  16. HOUDINI 蚯蚓制作
  17. NB-IoT 接入 5G 核心网丨边缘计算阅读周
  18. 使用opencv从mp4视频中抽帧并保存
  19. AVA设计模式初探之组合模式
  20. 《绝地求生:大逃杀》百万级别数据分析项目,还有源码+数据

热门文章

  1. 重磅发布|新一代云原生数据仓库AnalyticDB「SQL智能诊断」功能详解
  2. 【阿里巴巴研发效能峰会】低代码与数智化分论坛在线预约中……
  3. 阿里打造全球首个纯机器人送货高校,22个物流机器人进入浙大备战双11
  4. AI和大数据下,前端技术将如何发展?
  5. 阿里云张献涛:一切从场景出发,实现计算的全场景覆盖
  6. 换个角度入门 K8s
  7. java 停止一个线程_Java如何停止一个线程
  8. Unity VR游戏开发干货教程:优化VR体验
  9. 在UE4中创建受《羞辱》启发的环境
  10. ASCII可显示字符