新闻详情

新闻详情

首页 / 资讯中心 / 详情

Java高级后端 · 全套面试通关手册(RabbitMQ)

发布时间:2026/10/1 19:52:46来源:尧图网络
Java高级后端 · 全套面试通关手册(RabbitMQ)
核心思路生产者 - 交换机 Exchange - 队列 Queue - 消费者AMQP 协议。1.基础概念BrokerRabbitMQ 服务实例一个 Broker 包含多个 VirtualHost。VirtualHost(vhost)虚拟主机隔离资源交换机、队列可以分配权限类似数据库的库。Exchange 交换机接收生产者消息根据路由规则转发到队列。Queue 队列存储消息等待消费者消费。Binding 绑定交换机和队列之间的绑定关系绑定需要 routingKey。RoutingKey 路由键生产者发送消息携带用来匹配绑定规则。BindingKey 绑定键绑定时指定交换机根据 routingKey 匹配 bindingKey。4 种交换机类型⭐高频Direct直连routingKey 完全匹配 bindingKey消息发送到对应队列。点对点场景。Fanout广播忽略 routingKey消息分发到所有绑定该交换机的队列。群发、通知场景。Topic主题模糊匹配。*匹配一个单词#匹配 0 或多个单词。日志分类最常用。Headers不使用 routingKey通过消息 header 属性匹配性能差很少使用。2.消息可靠三大可靠性生产者、Broker、消费者(1)生产者消息投递确认保证消息成功到达 BrokerConfirm 确认机制生产者开启 publisher-confirm-type。消息到达 Broker 返回 ack失败返回 nack。异步回调。Return 退回机制消息到达交换机但是找不到匹配队列消息退回生产者。Confirm 保证消息成功抵达 exchangeReturn 保证消息成功路由到 queue。(2)Broker 持久化宕机不丢消息交换机持久化durabletrue队列持久化durabletrue消息持久化deliveryMode2三者都配置消息写入磁盘。但刷盘是操作系统异步极端断电仍可能丢失。(3)消费者消息确认 ACK防止消息丢失、重复消费自动 ACK默认消息分发成功就自动 ack。消费者还没处理完宕机 → 消息丢失生产禁用。手动 ACK业务处理成功调用basicAck处理失败basicNack拒绝可以 requeuetrue 重回队列requeuefalse 丢弃 / 转入死信。basicReject一次拒绝单条消息。生产推荐手动 ACK。3.死信队列 DLX重点死信消息无法被正常消费变成死信。 触发死信条件消息被 nackrequeuefalse消息 TTL 过期队列消息数量达到最大长度DLX 原理给普通队列绑定死信交换机消息变成死信自动转发到死信交换机路由到死信队列。适用场景延时队列、失败消息归档重试。RabbitMQ 没有原生延时队列TTLDLX 模拟延时队列缺陷队列过期是在消息出队时检测不是消息到期立刻转发。4.消息重复消费幂等MQ 无法避免重复投递网络抖动ack 丢失Broker 重复推送。解决方案业务端实现幂等唯一消息 ID数据库唯一索引Redis 记录已消费消息 id状态机根据业务状态判断是否处理口诀MQ 不保证只投递一次只能保证至少投递一次 at-least-once5.消息堆积问题⭐面试高频原因消费者消费速度远低于生产速度消费者宕机消费逻辑阻塞。解决方案排查消费代码优化消费逻辑去掉慢 IO增加消费者数量提高消费能力同一队列多消费者轮询消费批量消费堆积严重临时扩容队列分流紧急场景可以丢弃无效消息注意不要盲目提高 prefetch。prefetch 是预取数量。Prefetch预取basicQos (prefetchCount)告诉 MQ 一次性预取 N 条消息给消费者未 ack 前不再推送。 作用流量控制防止消费者一次性被压爆。6.消息丢失全链路总结生产者丢消息 → 开启 ConfirmReturn Broker 丢消息 → 交换机、队列、消息持久化 消费者丢消息 → 关闭自动 ACK使用手动 ACK7.其他高频知识点(1)集群模式普通集群消息只存在单个节点其他节点仅元数据访问其他节点会转发。镜像队列RabbitMQ3.8 后弃用消息同步到多个节点高可用。仲裁队列 Quorum Queue3.8 推荐Raft 协议数据多副本替代镜像队列高可用。(2)消费模式轮询默认消息均匀分给多个消费者公平分发配合 prefetch谁处理完给谁下一条(3)事务RabbitMQ 支持生产者事务channel.txSelect性能极差生产几乎不用优先 Confirm。高频深挖面试题Q1AMQP 和 Kafka 的协议区别RabbitMQ AMQP 是应用层协议Kafka 自定义二进制协议。AMQP 面向消息投递可靠性Kafka 面向高吞吐。Q2为什么不推荐用事务改用 Confirm事务同步阻塞性能差Confirm 异步回调吞吐量更高。Q3死信队列 TTL 两种设置方式消息级别 TTL每条消息单独过期时间队列级别 TTL队列内所有消息统一过期。队列 TTL 更推荐。Q4什么是 At most once / At least once / Exactly onceAt most once最多一次可能丢消息自动 ack At least once至少一次可能重复手动 ack生产常用 Exactly once恰好一次MQ 做不到业务幂等实现。Q5仲裁队列和镜像队列区别镜像队列全节点同步性能差3.8 废弃仲裁队列基于 Raft少数副本不可用仍可读性能更好。一句话背诵总结RabbitMQ 基于 AMQP4 种交换机 Direct/Fanout/Topic/Headers消息可靠性分生产者 Confirm、Broker 持久化、消费者手动 ACK死信队列 DLX 处理过期 / 拒绝消息MQ 只能保证至少投递一次业务实现幂等解决重复消费消息堆积优化消费能力Quorum 仲裁队列作为高可用方案。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

鱼缸潜水泵EMC整改:传导与辐射噪声根治方案 2026/10/1 20:37:13

鱼缸潜水泵EMC整改:传导与辐射噪声根治方案

1. 为什么鱼缸潜水泵的EMC问题总在深夜“闹鬼”?你有没有遇到过这种场景:鱼缸刚换上新买的静音潜水泵,水声潺潺,灯光柔和,造景美得像水下森林——结果第二天早上,WiFi断连三次、智能音箱突然开始念《道德经…

阅读更多 →
电控工程师必备:10个开源项目打造真实工程感 2026/10/1 20:37:00

电控工程师必备:10个开源项目打造真实工程感

1. 为什么电控岗简历石沉大海?不是你不行,是“工程感”没立住秋招季一到,我几乎每天都会收到私信:“投了30家车企/机器人公司/工业自动化企业的电控岗,连面试邀约都寥寥无几。”翻看这些同学的简历,硬件设计…

阅读更多 →
从Figma到Neovim:theSVG 10+插件与扩展生态全景清单 2026/10/1 20:36:47

从Figma到Neovim:theSVG 10+插件与扩展生态全景清单

从Figma到Neovim:theSVG 10插件与扩展生态全景清单 【免费下载链接】thesvg 7,400 brand SVG icons for developers. Tree-shakeable, typed, open source. npm i thesvg 项目地址: https://gitcode.com/gh_mirrors/th/thesvg theSVG 是一个开源的品牌 SVG 图…

阅读更多 →
机器学习大作业救星:Python+Streamlit算法可视化平台实战 2026/10/1 20:36:46

机器学习大作业救星:Python+Streamlit算法可视化平台实战

简介:这份资源是面向计算机、电子信息工程、数学等专业大学生的机器学习课程设计、期末大作业与毕业设计参考方案,核心为一个机器学习算法可视化平台,配套完整源代码与文档说明,帮助读者快速理解算法原理并完成可运行的项目交付。…

阅读更多 →
IAP升级死机?中断向量表重映射的绝对禁忌与正确实操 2026/10/1 20:36:40

IAP升级死机?中断向量表重映射的绝对禁忌与正确实操

做过IAP升级的嵌入式工程师,十有八九都遇到过这种场面:固件下载完成、校验通过,一复位,板子直接“睡死”——灯不闪、串口无输出、按复位键也没反应。更诡异的是,有些机器第一次升级后一切正常,第二次再升就…

阅读更多 →
RTC实时时钟驱动开发实战:从初始化到低功耗唤醒与校准 2026/10/1 20:36:39

RTC实时时钟驱动开发实战:从初始化到低功耗唤醒与校准

简介:面向嵌入式驱动开发者的RTC(实时时钟)驱动开发参考包,围绕实时时钟芯片的驱动实现展开,覆盖初始化、时间读取与设置、中断处理、电源管理、闰年与月份天数更新等关键环节,适合需要基于嵌入式平台实现或…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉