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

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

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

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 编写发布。

相关推荐
DemonAvenger1 天前
Kafka性能调优:从参数配置到硬件选择的全方位指南
性能优化·kafka·消息队列
Javatutouhouduan3 天前
RocketMQ是怎么保存偏移量的?
java·消息队列·rocketmq·java面试·消息中间件·后端开发·java程序员
DemonAvenger3 天前
深入理解Kafka分区策略:实现数据均衡分布的最佳实践
性能优化·kafka·消息队列
予枫的编程笔记4 天前
【Kafka进阶篇】Kafka消息重复消费?Exactly-Once语义落地指南,PID+事务消息吃透
人工智能·kafka·消息队列·exactly-once·分布式消息·kafka幂等性·kafka事务消息
切糕师学AI5 天前
什么是死信队列(Dead Letter Queue)?
消息队列·死信队列·mq
切糕师学AI5 天前
RabbitMQ 是什么?
微服务·消息队列·rabbitmq
予枫的编程笔记6 天前
【Kafka基础篇】Kafka Consumer Group设计哲学拆解:为什么它能支撑高并发消费?
kafka·消息队列·consumer消费机制·consumer group·offset提交·pull模型·大数据实战
予枫的编程笔记6 天前
【Kafka基础篇】Kafka高可用核心:ISR机制与ACK策略详解,吃透可靠性与吞吐量权衡
java·kafka·消息队列·高可用·分布式系统·isr机制·ack策略
何中应7 天前
RabbitMQ安装及简单使用
分布式·后端·消息队列
何中应7 天前
SpringAMQP消息转化器
分布式·后端·消息队列