面试八股——RabbitMQ

消息丢失问题

消息确认机制

生产者与MQ之间的消息确认:

当MQ成功接收消息后,会返回给生产者一个确认消息。如果在规定时间内生产者未收到确认消息,则任务消息发送失败。

MQ与消费者之间的消息确认:

当MQ成功接收消息后,会返回给MQ一个确认消息,MQ此时会将对应消息删除。如果在规定时间内MQ未收到确认消息,则任务消息发送失败。

补发机制

当确认消息丢失后,可通过补发机制重发消息:

通过回调方法即时完成重发。

将发送的消息记录于日志文件当中。然后进行重发。

持久化

MQ通过内存存储消息,如果系统突然断电会导致消息丢失。因此可使用持久化方法(交换机持久化、队列持久化、消息持久化):

重复消费问题

出现原因举例:在保证MQ消息不重复的情况下,消费者消费消息成功后,在给MQ发送消息确认的时候出现了网络异常(或者是服务中断),MQ没有接收到确认,此时MQ会补发一条消息,从而导致重复消费。

解决方法:

  1. 每条消息设置唯一id。消费者接收到消息时会校验id是否存在(是否已在数据库中),如果存在则不处理该条消息。

  2. 幂等方案。

死信交换机

死信交换机的定义:

  1. 消息被消费者拒绝
  1. 消息超过生存时间TTL:这个方法可实现超时队列。如订单支付,给订单消息创建TTL,如果超时,订单消息变为死信,订单失效。

3.队列满了,则处于对头的消息也可能成为死信。

消息堆积问题

问题描述:

解决方法:

扩大队列容积的办法------惰性队列(将队列中的消息存入磁盘而非内存):

相关推荐
孓最求完美4 小时前
Charles 进阶抓包教程:突破 SSL Pinning、代理检测与 Flutter 抓包限制
面试
thesky1234565 小时前
智能体面试准备(九):工作流编排——DAG 与状态机两种范式的取舍与手写实现
面试·agent·状态机·工作流·智能体
Revolution615 小时前
reactive 对象重新赋值后,表单为什么没有恢复默认值
前端·vue.js·面试
HeiSenBerg5 小时前
Android Handler 机制完全解析:从源码到内存泄漏,一篇就够了
面试
only-qi7 小时前
大模型Agent面试攻略:落地工程痛点、评估体系与Agentic RAG核心精讲
人工智能·算法·面试·职场和发展·langchain·rag
数字宝藏7 小时前
15本电子书分享
职场和发展·职场发展·教育电商
ShineWinsu8 小时前
对于Linux:传输层协议UDP原理的解析
linux·c++·面试·udp·协议·传输层·计算机系统
GitLqr8 小时前
StatefulWidget 里的隐形炸弹:为什么不要在 State 类中使用 context.mounted
flutter·面试·dart
梦想的颜色9 小时前
2026 AI Agent 工程师完整技术图谱|从面试题「什么是本体 Ontology」切入,附精选面试题库
面试·知识图谱·langgraph·aiagent·大模型面试·本体·2026 面试真题
不简说10 小时前
JS 代码技巧 vol.10 — 20 个 V8 引擎原理,解释"为什么这样写快"
前端·javascript·面试