消息队列面试题:为什么要使用消息队列?

消息队列面试题:为什么要使用消息队列?

开源项目:浪海博客 需要星星 谢谢 ~

gitee地址:https://gitee.com/langhai666/langhai-blog

github地址:https://github.com/Allenkuzma/langhaiblogs

为什么要使用消息队列?

首先需要了解 MQ 消息队列的三个最重要的优点或者说特征:解耦、异步、削峰。

这里由购物场景来说明:用户下单,必然会生成订单,生成物流信息,以及减少库存。

解耦:

在没有引入消息队列之前,下单系统会和库存系统以及物流系统等其他系统存在严重的耦合关系。

在引入消息队列之后,各个系统只需要从自己感兴趣的队列当中消费消息,也就是一个发布订阅模型,在代码层面各个系统的耦合性大大降低了。

异步:

在没有引入消息队列之前,下单系统需要同步调用各个其他系统来进行减少库存和生成物流信息等操作。这些操作的时间加起来,有可能超过1秒,可能会给用户的体验带来影响。

在引入消息队列之后,下单系统只需要将消息发送到消息队列中即可,这样大大节省了用户等待的时间,提升了用户的体验感。

削峰:

餐饮系统当中,中饭和晚饭的时候是一个高峰期,在某一个时间段会有大量的请求发过来,这样有可能导致把mysql打死,从而导致系统崩溃。

在引入消息队列之后,可以将大量的请求先存储在消息队列当中,按照自己系统的消费能力慢慢消费,最终起到一个流量平缓的效果。

在引入消息队列之后,带来了哪一些弊端?

系统可用性降低

系统引入了外部的组件越多,遇到的问题就会越多。如果消息队列挂了怎么办呢?这个时候将要考虑消息队列的高可用模型。

系统的复杂度提高

引入消息队列之后,需要考虑消息的丢失问题,以及消息有可能被重复消费的问题。还有一致性问题(有的系统成功消费,有的系统消费失败,造成数据不一致的情况。)等等。

如何从activeMQ、RabbitMQ、RocketMQ、Kafka中选择合适的消息队列?

activeMQ的起源比较早,现在社区的活跃度比较低,使用的人也比较少,一般不推荐使用。

rabbitMQ采用的erlang语言开发,如果要进行二次定制开发的话,就必须掌握erlang语言。rabbitMQ的时效性最低,可以到达微秒级别。

rocketMQ是阿里巴巴出品,经历过大规模吞吐量场景的验证(双十一购物),国内有许多公司在使用。

kafka在大数据方面应用的非常多,比如说用来进行日志采集和实时计算等场景。

本文章由 浪海博客 2024-01-12 编写发布。

相关推荐
whaledown4 天前
Kafka 与 Java 消息队列入门:用订单场景理解核心机制
java·kafka·消息队列·springboot
阿昌喜欢吃黄桃4 天前
RocketMq事务消息原理
java·中间件·消息队列·rocketmq·mq
码农飞哥7 天前
RocketMQ消费接口设计实战:为什么HTTP回调接口必须吞掉所有异常,始终返回成功?
网络协议·http·中间件·消息队列·rocketmq
小小工匠10 天前
Redis - 缓存与数据库一致性:问题分析与解决方案
redis·缓存·性能优化·消息队列·并发
闪电悠米11 天前
黑马点评-Redis 消息队列-01_why_redis_mq
java·数据库·spring boot·redis·缓存·junit·消息队列
Fcy64811 天前
Linux下 进程间通信详解(二)System V IPC
linux·运维·消息队列·共享内存·信号量·system v
Tenifs17 天前
深入对比分析 RabbitMQ、RocketMQ 和 Kafka
后端·kafka·消息队列·rabbitmq·rocketmq·爱编程的阿彬
小楼v17 天前
Kafka消息队列安装步骤及从0入门到基础核心掌握
java·kafka·消息队列·教程·安装
Andy Dennis18 天前
nsq学习记录
消息队列·go·nsq
愤怒的苹果ext20 天前
Spring Boot Redis Stream队列
spring boot·redis·消息队列·stream