互联网高级Java工程师训练-如何进行消息队列的技术选型

面试题:为什么使用消息队列?消息队列有什么优点和缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别以及适合哪些场景?

其实面试官主要是想看看,

其实就是问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队列是什么?面试官为你这个问题,期望的一个回答是说,你们公司有个什么样的场景,这个业务场景有个什么技术挑战,如果不用mq可能会很麻烦,但是你现在用了mq之后带给你很多好处

消息队列的使用场景,比较核心的场景有3个:解耦异步削峰

解耦:现场画个图来说明一下,A系统发送个数据到BCD三个系统,通过接口调用发送,那如果E系统也要这个数据呢?那如果C系统现在不需要了呢,那A是不是要代码?现在A系统又要发送第二种数据了呢?A系统负责人崩溃中…,再来点更加崩溃的事,A系统要时时刻刻考虑BCDE四个系统挂了咋办?我要不要重发?我要不要把消息存起来?

异步:现场画个图来说明一下,A系统接收一个请求,需要在自己本地写库,还需要在BCD三个系统写库,自己本地写库要3ms,BCD三个系统分别写库要300ms,450ms,2000ms。最终请求耗时3 + 300 + 450 + 2000 = 2753ms,给用户的体验相当不好。

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

优点:在特殊场景下有其对应的好处,解耦,异步,削峰。
缺点:系统可用性降低,系统引入的外部依赖越多,越容易挂掉,加入MQ中间件进来,如果MQ挂掉,会导致整个系统崩溃。

发布了219 篇原创文章 · 获赞 42 · 访问量 28万+

猜你喜欢

转载自blog.csdn.net/Geek_ymv/article/details/96893393