RabbitMQ消息队列常见面试题

简介: 这篇文章总结了RabbitMQ的常见面试题,涵盖了消息模型、使用场景、实现功能、消息幂等性、顺序性、堆积和丢失的避免方法,以及推模式和拉模式的区别。

前言

本文是对RabbitMQ的常见面试题问答的总结,同时也是一个RabbitMQ的入门学习,还没了解的同学快来认识一下。

1.RabbitMQ消息模型有哪些?

(1)HelloWorld 模型(点对点模型)

  • 一个生产者
  • 一个消息队列
  • 一个消费者

(2)WorkQueues 模型(任务模型)

  • 一个生产者
  • 一个消息队列
  • 多个消费者

(3)Publish/Subscribe 模型(广播模型)

  • 一个生产者
  • 一个 fanout 交换机
  • 多个消息队列
  • 多个消费者
  • 交换机绑定多个队列
  • 每个消息队列绑定一个消费者

(4)Routing 模型(路由模型)

  • 一个生产者
  • 一个 direct 交换机
  • 多个消息队列
  • 多个消费者
  • 交换机绑定多个队列
  • 每个消息队列绑定一个消费者

(5)Topics 模型(动态路由模型)

  • 一个生产者
  • 一个 topic 交换机
  • 多个消息队列
  • 多个消费者
  • 交换机绑定多个队列
  • 每个消息队列绑定一个消费者

参考资料:https://blog.csdn.net/F0217911/article/details/126621205

2.RabbitMQ的使用场景有哪些?

(1)异步处理:比如用户注册或登录时,生产者发送消息到MQ队列,消费者再读取处理消息,执行发送短信和邮件动作。
(2)系统解耦:比如用注册完成,再加一个发送微信通知。只需要新增发送微信消息模块,从MQ中读取任务,发送消息即可。无需改动注册模块的代码,这样注册模块与发送模块通过MQ解耦。
(3)流量削峰:秒杀和抢购等场景经常使用MQ进行流量削峰。活动开始时流量暴增,用户的请求写入MQ,超过MQ最大长度丢弃请求,业务系统接收 MQ中的消息进行处理,达到流量削峰、保证系统可用性的目的。

3.你们用RabbitMQ实现了什么功能?

(1)基于RabbitMQ+Redis+DiyThreadPool实现按顺序幂等消费消息执行任务。

4.如何保证消息幂等性?

消息幂等性是指对于同一条消息,无论重复发送多少次,接收端都只接收到一次消息,且消息的处理结果相同。

(1)生产者生成消息时,每条消息都有唯一ID字段,可以使用UUID或者Snowflake算法等方式生成。
(2)消费者在处理消息时,先根据ID去Redis查询是否存在该消息,若不存在则正产消费,消费完存入此ID到Redis,若存在则说明此消息已被消费过,直接丢弃。

5.如何保证消息顺序性?

很多时候,消息的消费是不用保证顺序的,比如借助mq实现订单超时的处理。但有些时候,业务中可能会存在多个消息需要顺序处理的情况,比如生成订单和扣减库存消息,那肯定是先执行生成订单的操作,再执行扣减库存的操作。

(1)一个消息队列对应一个消费者:这种方法最简单,保证消息是按照顺序进行的。
(2)一个消息队列对应多个消费者:要想保证消息是按照顺序进行的,就得开启单活模式,表示是否最多只允许一个消费者消费,如果有多个消费者同时绑定,则只会激活第一个,除非第一个消费者被取消或者死亡,才会自动转到下一个消费者。

参考资料:https://baijiahao.baidu.com/s?id=1773108861109586675

6.如何避免消息堆积?

消息队列的消息堆积可能是由于消费者无法及时处理消息、消费者处理消息的速度跟不上消息的产生速度、消息队列的容量不足等原因造成的。

(1)增加消息队列数量。
(2)增加消费者数量。
(3)通过自定义线程池异步消费。

7.如何避免消息丢失?

丢失情况主要有生产者丢失消息、消息队列丢失消息、消费者丢失消息三种情况。

(1)消息确认机制。
(2)消息持久化。

8.RabbitMQ中推模式和拉模式的区别

(1)推模式是中间件将消息提前推送给消费者,消费者需设置一个缓冲区缓存消息。好处是消费者总是有一堆在内存中待处理的消息,所以效率高,缺点是缓冲区可能会溢出。
(2)拉模式是消费者有需要时才去中间件拉取消息。
(3)推模式更关注实时性,拉模式更关注消费者的消费能力。
相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
3天前
|
消息中间件 大数据 Kafka
大厂面试高频:Kafka、RocketMQ、RabbitMQ 的优劣势比较
本文深入探讨了消息队列的核心概念、应用场景及Kafka、RocketMQ、RabbitMQ的优劣势比较,大厂面试高频,必知必会,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:Kafka、RocketMQ、RabbitMQ 的优劣势比较
|
1月前
|
消息中间件 存储 canal
阿里面试:canal+MQ,会有乱序的问题吗?
本文详细探讨了在阿里面试中常见的问题——“canal+MQ,会有乱序的问题吗?”以及如何保证RocketMQ消息有序。文章首先介绍了消息有序的基本概念,包括全局有序和局部有序,并分析了RocketMQ中实现消息有序的方法。接着,针对canal+MQ的场景,讨论了如何通过配置`canal.mq.partitionsNum`和`canal.mq.partitionHash`来保证数据同步的有序性。最后,提供了多个与MQ相关的面试题及解决方案,帮助读者更好地准备面试,提升技术水平。
阿里面试:canal+MQ,会有乱序的问题吗?
|
23天前
|
消息中间件 JSON Java
开发者如何使用轻量消息队列MNS
【10月更文挑战第19天】开发者如何使用轻量消息队列MNS
63 5
|
18天前
|
消息中间件 存储 Kafka
MQ 消息队列核心原理,12 条最全面总结!
本文总结了消息队列的12个核心原理,涵盖消息顺序性、ACK机制、持久化及高可用性等内容。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
|
1月前
|
消息中间件 安全 Java
云消息队列RabbitMQ实践解决方案评测
一文带你详细了解云消息队列RabbitMQ实践的解决方案优与劣
63 7
|
21天前
|
消息中间件
解决方案 | 云消息队列RabbitMQ实践获奖名单公布!
云消息队列RabbitMQ实践获奖名单公布!
|
29天前
|
消息中间件 存储 弹性计算
云消息队列RabbitMQ实践
云消息队列RabbitMQ实践
|
1月前
|
消息中间件 存储 监控
解决方案 | 云消息队列RabbitMQ实践
在实际业务中,网站因消息堆积和高流量脉冲导致系统故障。为解决这些问题,云消息队列 RabbitMQ 版提供高性能的消息处理和海量消息堆积能力,确保系统在流量高峰时仍能稳定运行。迁移前需进行技术能力和成本效益评估,包括功能、性能、限制值及费用等方面。迁移步骤包括元数据迁移、创建用户、网络打通和数据迁移。
64 4
|
2月前
|
消息中间件 监控 数据处理
解决方案 | 云消息队列RabbitMQ实践
解决方案 | 云消息队列RabbitMQ实践
52 1
|
2月前
|
消息中间件 弹性计算 运维
云消息队列RabbitMQ实践
本评测报告详细分析了阿里云云消息队列 RabbitMQ 版的实践原理、部署体验及核心优势。报告认为其在解决消息积压、脑裂难题及弹性伸缩方面表现优秀,但建议进一步细化架构优化策略和技术细节描述。部署文档详尽,对初学者友好,但仍需加强网络配置和版本兼容性说明。实际部署展示了其高可用性和成本优化能力,适用于高并发消息处理和分布式系统数据同步。为进一步提升方案,建议增加安全性配置指导、性能调优建议及监控告警系统设置。