消息队列经典十连问

本文详细解答了关于消息队列的十个经典面试问题,涵盖消息队列的基本概念、应用场景、防止消息丢失的方法、消息顺序性、幂等处理、消息积压解决方案、技术选型、高可用保障、数据一致性以及事务消息实现,同时探讨了设计一个消息队列时应考虑的关键点。通过这些内容,可以帮助读者深入理解消息队列在实际应用中的关键作用和挑战。
摘要由CSDN通过智能技术生成

整理了十道十分经典的消息队列面试题,看完肯定对面试有帮助的,大家一起加油哈~

  1. 什么是消息队列

  2. 消息队列的应用场景

  3. 消息队列如何解决消息丢失问题

  4. 消息队列如何保证消息的顺序性。

  5. 消息有可能发生重复消费吗?如何幂等处理?

  6. 如何处理消息队列的消息积压问题

  7. 消息队列技术选型,Kafka还是RocketMQ,还是RabbitMQ

  8. 消息中间件如何做到高可用?

  9. 如何保证数据一致性,事务消息如何实现

  10. 如果让你写一个消息队列,该如何进行架构设计?

1. 什么是消息队列

你可以把消息队列理解为一个使用队列来通信的组件。它的本质,就是个转发器,包含发消息、存消息、消费消息的过程。最简单的消息队列模型如下:

我们通常说的消息队列,简称MQ(Message Queue),它其实就指消息中间件,当前业界比较流行的开源消息中间件包括:RabbitMQ、RocketMQ、Kafka

2. 消息队列有哪些使用场景。

有时候面试官会换个角度问你,为什么使用消息队列。你可以回答以下这几点:

  1. 应用解耦

  2. 流量削峰

  3. 异步处理

  4. 消息通讯

  5. 远程调用

2.1 应用解耦

举个常见业务场景:下单扣库存,用户下单后,订单系统去通知库存系统扣减。传统的做法就是订单系统直接调用库存系统:

  • 如果库存系统无法访问,下单就会失败,订单和库存系统存在耦合关系

  • 如果业务又接入一个营销积分服务,那订单下游系统要扩充,如果未来接入越来越多的下游系统,那订单系统代码需要经常修改

如何解决这个问题呢?可以引入消息队列

  1. 订单系统:用户下单后,消息写入到消息队列,返回下单成功

  2. 库存系统:订阅下单消息,获取下单信息,进行库存扣减操作。

2.2 流量削峰

流量削峰也是消息队列的常用场景。我们做秒杀实现的时候,需要避免流量暴涨,打垮应用系统的风险。可以在应用前面加入消息队列。

假设秒杀系统每秒最多可以处理2k个请求,每秒却有5k的请求过来,可以引入消息队列,秒杀系统每秒从消息队列拉2k请求处理得了。

有些伙伴担心这样会出现消息积压的问题,

  • 首先秒杀活动不会每时每刻都那么多请求过来,高峰期过去后,积压的请求可以慢慢处理;

  • 其次,如果消息队列长度超过最大数量,可以直接抛弃用户请求或跳转到错误页面;

2.3 异步处理

我们经常会遇到这样的业务场景:用户注册成功后,给它发个短信和发个邮件。

如果注册信息入库是30ms,发短信、邮件也是30

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值