RabbitMQ 3.11.2 维护版本解析:镜像队列稳定性修复与 MQTT 维护模式行为修正
RabbitMQ 3.11.2 维护版本解析镜像队列稳定性修复与 MQTT 维护模式行为修正【免费下载链接】rabbitmq-serverOpen source RabbitMQ: core server and tier 1 (built-in) plugins项目地址: https://gitcode.com/gh_mirrors/ra/rabbitmq-serverRabbitMQ3.11.2是3.11.x发布系列中的一个维护版本maintenance release主要面向经典镜像队列classic mirrored queue的稳定性与 MQTT 插件在维护模式maintenance mode下的行为修正。本文以 release-notes/3.11.2.md 为骨架结合当前仓库中deps/rabbit与deps/rabbitmq_mqtt的源码实现逐一拆解本版本的四个 Bug 修复背后的原理、影响范围与升级注意事项帮助集群运维者评估是否需要升级以及升级后的行为变化。版本定位与运行环境要求RabbitMQ3.11.2属于3.11.x系列核心特征是自 3.11.0 起将 Erlang 最低支持版本提升至 Erlang 25本版本延续这一要求运行在 Erlang 25 之下的节点将无法启动will fail to startErlang 25 作为新的基线为 ARM64 架构带来显著性能提升同时所有架构都能获得更完整的 profiling 能力如火焰图分析与最新的 TLS 1.3 实现支持若从 3.11.0 之前的版本升级需先查阅 v3.11.0 发布说明中的升级章节遵循对应的升级路径。也就是说评估本版本是否适合你的环境时第一优先级是确认所有节点的 Erlang 版本不低于 25否则升级后节点会直接拒绝启动。Core Server 修复详解本版本中核心服务器Core Server共包含三个 Bug 修复其中两个与经典镜像队列classic mirrored queueCMQ直接相关一个涉及集群内部通信链路的指标采集。回退不安全的节点间通信优化GitHub issue #6115现象与修复本版本部分回退partially reverts了一项此前引入的节点间通信优化对应 PR #3865该优化存在安全隐患可能影响经典镜像队列的操作顺序ordering。修复由社区成员 bording 提供了自动化复现方法后被确认并解决。源码侧的理解经典镜像队列依赖 leader 与 follower 之间的有序消息流来保证镜像一致性而节点间通信优化往往通过批量化、异步化的手段压缩往返开销一旦在 peer 恢复、消息积压等场景下打破原有顺序保证就会导致 follower 侧的操作顺序与 leader 不一致。从仓库中的镜像队列实现看leader 到 follower 的同步路径分散在 deps/rabbit/src/rabbit_amqqueue_process.erl队列进程状态机与 deps/rabbit/src/rabbit_classic_queue.erl经典队列 BQ 层中这类跨进程通信对顺序高度敏感因此回退该优化、恢复保守的通信路径是恢复操作顺序保证的稳妥做法。运维影响本修复属于行为回归修正升级后经典镜像队列在节点间通信路径上恢复为更保守的调度方式对使用经典镜像队列且重视严格顺序的存量用户建议优先升级到本版本。经典镜像队列 leader 过度授予 follower creditGitHub issue #6110现象与修复经典镜像队列的 leader 副本此前向 follower 副本授予了过多的 credit信用额度导致各 follower 之间的负载load与内存占用memory footprint不均——部分 follower 积压了超出预期的数据量而其他 follower 相对空闲。源码侧的理解credit 机制在 RabbitMQ 中用于背压backpressure控制本质是发送方只有在收到接收方授予的 credit 后才能继续投递消息从而限制在途in-flight数据量。经典镜像队列中leader 通过 deps/rabbit/src/rabbit_classic_queue.erl 的credit/6将{credit, self(), Ctag, DeliveryCountRcv, LinkCreditRcv, Drain}请求委托给队列进程rabbit_amqqueue_process队列进程侧则在 deps/rabbit/src/rabbit_amqqueue_process.erl 的handle_cast({credit, ...})中经由rabbit_queue_consumers:process_credit/6处理并调用rabbit_classic_queue:send_credit_reply/7见 deps/rabbit/src/rabbit_classic_queue.erl向消费方回发credit_reply。当授予的 credit 数量过大时follower 的在途数据缓冲就会膨胀从而出现负载与内存的不均衡。修复效果调整 leader 授予 follower 的 credit 额度使各副本在途数据量趋于均衡降低内存峰值与副本间的负载倾斜。集群通信链路指标收集器异常GitHub issue #6127现象与修复集群内部通信链路intra-cluster communication link的指标收集器metric collector在 peer 连接刚刚重建例如 peer 节点重启之后时可能抛出异常。原因与影响指标收集器通常依赖持续存活的进程引用或连接状态来读取统计信息当 peer 连接重建、旧进程退出而新进程尚未完成注册时收集器持有的引用可能短暂失效从而触发异常。该异常一般不影响数据面消息收发但会导致该轮指标采集失败、统计出现空缺或日志中出现异常信息。运维建议该修复属于健壮性增强升级后集群节点滚动重启过程中的指标采集将更稳定配合监控系统如 rabbitmq_prometheus使用时可减少统计缺口。MQTT 插件修复维护模式只应关闭本地连接GitHub issue #6108现象与修复此前当节点被置入维护模式maintenance mode时MQTT 插件会在整个集群范围内关闭所有 MQTT 客户端连接而预期行为是只关闭**本节点local**的客户端连接。本版本将其修正为仅关闭本地连接。源码侧的证据链这个修复在仓库中可以从三层代码完整还原维护模式的事件源节点进入 drain排空流程时核心服务器在关闭本地客户端连接之后会发出内部事件maintenance_connections_closed见 deps/rabbit/src/rabbit_maintenance.erlclose_all_client_connections/0之后rabbit_event:notify(maintenance_connections_closed, ...)。MQTT 插件的事件响应MQTT 插件通过 deps/rabbitmq_mqtt/src/rabbit_mqtt_internal_event_handler.erl 订阅该事件事件到达时调用rabbit_mqtt:close_local_client_connections(maintenance)并记录警告日志Closed ~b local (Web) MQTT client connections。“本地”的语义实现close_local_client_connections/1见 deps/rabbitmq_mqtt/src/rabbit_mqtt.erl通过pg进程组作用域枚举pg:get_local_members/2得到本节点的 MQTT 连接进程列表再逐一对每个进程调用rabbit_mqtt_reader:close_connection/2。由于获取的是 local members天然不会波及集群其他节点上的 MQTT 连接。关闭时的客户端通知rabbit_mqtt_reader在收到{close_connection, Reason}消息时见 deps/rabbitmq_mqtt/src/rabbit_mqtt_reader.erl若Reason : maintenance会先通过rabbit_mqtt_processor:send_disconnect(?RC_SERVER_SHUTTING_DOWN, PState)向客户端发送 MQTT DISCONNECT 报文原因码Server shutting down随后以{shutdown, {disconnect, server_initiated}}正常终止连接——这保证了被维护的节点上的 MQTT 客户端能收到明确的断开原因而不是静默断连。运维影响在维护节点、执行滚动升级时集群其他节点上的 MQTT 客户端含 Web MQTT将不再被误伤断连提升滚动维护期间 MQTT 业务的连续性。依赖升级与源码归档依赖升级Dependency Upgrades本版本无任何依赖升级None in this release因此升级的兼容面更小主要风险集中在上述行为修复上。源码归档Source Code Archives获取完整发行版源码时请下载名为rabbitmq-server-3.11.2.tar.xz的归档包不要使用 GitHub 自动生成的源码 tarball后者可能不包含完整构建环境所需的文件。升级评估清单综合本版本内容建议运维者在升级前对照以下清单Erlang 版本所有节点必须运行 Erlang 25 及以上否则节点拒绝启动经典镜像队列本版本涉及顺序保证回归修复与 credit 均衡修复若业务依赖经典镜像队列的顺序性与多副本内存均衡建议升级MQTT 插件若启用rabbitmq_mqtt或rabbitmq_web_mqtt且频繁执行节点维护如滚动升级、Kubernetes preStop 排空本版本的“仅关闭本地连接”修复能显著减少对客户端的影响滚动升级方式从 3.11.0 之前版本升级的用户需按 v3.11.0 升级说明执行3.11.x 系列内的小版本升级仍遵循标准的节点逐个排空drain—升级—恢复revive流程其中 drain 流程见 deps/rabbit/src/rabbit_maintenance.erl。总结RabbitMQ 3.11.2 是一个聚焦稳定性的小版本核心服务器围绕经典镜像队列修复了节点间通信顺序隐患与 credit 授予失衡问题并增强了集群链路指标采集的健壮性MQTT 插件则修正了维护模式下误关全集群连接的行为使其严格限定在本节点范围。结合仓库源码可见这些修复分别落在 deps/rabbit/src/rabbit_amqqueue_process.erl、deps/rabbit/src/rabbit_classic_queue.erl、deps/rabbit/src/rabbit_maintenance.erl 以及 deps/rabbitmq_mqtt/src/rabbit_mqtt.erl 等模块中读者可沿着这些路径继续深入阅读对应实现。对于运行经典镜像队列或大规模 MQTT 接入的集群本版本值得纳入升级计划。【免费下载链接】rabbitmq-serverOpen source RabbitMQ: core server and tier 1 (built-in) plugins项目地址: https://gitcode.com/gh_mirrors/ra/rabbitmq-server创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

STM32 RDP锁死原理与J-Link安全解锁实战指南

STM32 RDP锁死原理与J-Link安全解锁实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/23 1:19:15 阅读更多 →
Apache Druid 物化视图(Materialized View):基于 derivativeDataSource 的查询加速实战指南

Apache Druid 物化视图(Materialized View):基于 derivativeDataSource 的查询加速实战指南

Apache Druid 物化视图(Materialized View):基于 derivativeDataSource 的查询加速实战指南 【免费下载链接】druid Apache Druid: a high performance real-time analytics database. 项目地址: https://gitcode.com/gh_mirrors/druid6/dr…

2026/9/24 2:56:14 阅读更多 →
2026最新超级qq纪念版源码避坑指南

2026最新超级qq纪念版源码避坑指南

2026最新超级qq纪念版源码避坑指南 官方文档动辄几百页,读起来像看天书?别慌。2026最新版的开发环境虽然升级了底层架构,但核心逻辑没变。很多人卡在第一步,不是技术不行,是信息过载。 现象:为什么你的代码跑不起来…

2026/9/23 1:19:15 阅读更多 →

最新新闻

glb压缩踩坑实录

glb压缩踩坑实录

目录 gltf-pipeline 压缩后变粗糙了: gltf-transform/cli 高保真压缩: 解压缩: gltf-pipeline 安装 : sudo npm install -g gltf-pipeline gltf-pipeline -i yotown-202605291542.glb -o out_draco_highprec.glb \ --draco.compressionLevel=7 --draco.quantizePos…

2026/9/24 6:41:37 阅读更多 →
测试markdown时间:21:1

测试markdown时间:21:1

21.1

2026/9/24 6:41:37 阅读更多 →
用 AI 处理敏感数据前,先分清这三层的边界

用 AI 处理敏感数据前,先分清这三层的边界

问题的本质 「AI 会不会泄露我的数据」这个问题问得太笼统。把它拆成三层,答案就清楚了:数据在哪一层,决定了它有没有出网。 第一层:模型层(生成建议) 你把数据贴进对话框,让 AI 帮你写方法、…

2026/9/24 6:40:36 阅读更多 →
计算机复试PDF资料处理指南:从解析、转换到高效整理

计算机复试PDF资料处理指南:从解析、转换到高效整理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 6:40:36 阅读更多 →
Rich 98三模PCB简要使用文档

Rich 98三模PCB简要使用文档

键盘使用说明索引(均为出厂默认值)注意保修期首次使用步骤USB,蓝牙,2.4G如何切换以及配对连接驱动驱动会列出系统内可识别的所有LDN三模键盘,连接设备名字为3M Rich98的键盘即可。默认层触发测试电量其他问题&#xff…

2026/9/24 6:40:36 阅读更多 →
Jetson适配GMSL相机板实战:Waveshare MAX9296A深度解析

Jetson适配GMSL相机板实战:Waveshare MAX9296A深度解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 6:40:36 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →