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

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

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

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

相关推荐
恋喵大鲤鱼7 天前
分布式消息投递模型快速上手
消息队列·投递模型
少许极端9 天前
消息队列5-RabbitMQ的高级特性和MQ的应用问题与解决方案-事务、消息分发的应用、幂等性保证、顺序性保证、消息积压的解决
分布式·消息队列·rabbitmq
却话巴山夜雨时i10 天前
互联网大厂Java面试场景:从基础到微服务的循序渐进提问
java·数据库·spring·微服务·面试·消息队列·技术栈
__土块__10 天前
一次支付清结算系统线程池故障复盘:从任务积压到异步解耦的架构演进
java·消息队列·rocketmq·线程池·支付系统·故障复盘·异步架构
少许极端12 天前
消息队列4-RabbitMQ的高级特性-TTL机制、死信队列、延迟队列
分布式·消息队列·rabbitmq
014-code12 天前
RabbitMQ 生产端可靠投递(confirm、return、重试)
分布式·消息队列·rabbitmq
014-code12 天前
RabbitMQ 消费端幂等实战(重复消息、去重、重放怎么处理)
分布式·消息队列·rabbitmq
代码AC不AC14 天前
【Linux】System V 通信方式
linux·消息队列·共享内存·信号量·system v
AutoMQ14 天前
360 如何用 AutoMQ 解决千亿级 Kafka 冷读难题
kafka·消息队列·云计算
indexsunny15 天前
互联网大厂Java面试实战:从Spring Boot到微服务的技术问答解析
java·spring boot·redis·微服务·消息队列·电商