RabbitMQ 3.12.4 维护版本解析quorum queue 消费者流失修复、副本管理开关与 LDAP 非 ASCII 插值修复【免费下载链接】rabbitmq-serverOpen source RabbitMQ: core server and tier 1 (built-in) plugins项目地址: https://gitcode.com/gh_mirrors/ra/rabbitmq-serverRabbitMQ3.12.4是3.12.x发布系列中的维护版本聚焦于 quorum queue仲裁队列在高消费者流失场景下的消息投递可靠性、队列 federation 链接卡死、Management 插件 HTTP API 权限边界以及 LDAP 后端对非 ASCII 字符的插值处理。本文基于仓库中的 release-notes/3.12.4.md 发布说明逐项还原每一条修复的底层源码实现与配置方法帮助运维与开发者理解该版本修复的实质内容并掌握对应的升级、配置与验证手段。版本概况与 Erlang 兼容性3.12.4是3.12.x系列中的维护版本maintenance release不引入新特性以缺陷修复为主。该版本要求 Erlang 25 起步并支持到26.0.x。自3.12.0起RabbitMQ 的最低支持 Erlang 版本即为 Erlang 25——在更老的 Erlang 版本上节点将直接启动失败nodes will fail to start。因此升级前必须确认运行环境满足版本要求项目要求最低 Erlang 版本Erlang 25低于此版本节点无法启动支持范围至26.0.x升级路径若从 3.11.x 或更早版本升级需先阅读 3.12.0 发布说明 的升级章节尤其需要注意如果同时升级 RabbitMQ 与 Erlang例如从 3.11.x Erlang 25 直接跳到 3.12.x Erlang 26必须先查阅 3.12.0 发布说明因为这种双升级涉及磁盘格式、内部数据结构的兼容性变更不能跳过中间步骤。核心服务器Core Serverquorum queue 消费者流失导致消息未投递问题描述3.12.4修复了 quorum queue 在消费者流失consumer churn场景下的一个投递缺陷在某些情况下部分消息没有被投递给消费者。该问题主要影响队列 federation 链接queue federation links即通过 federation 插件将上游队列消息转发到下游 quorum queue 的场景。对应 GitHub issue 编号为#9151。底层机制解读quorum queue 的投递模型基于 Raft 日志复制 消费者信用credit机制。在仓库源码 deps/rabbit/src/rabbit_quorum_queue.erl 中可以看到模块导出了credit/6、settle/5、dequeue/6、consume/3、cancel/3以及deliver/3等核心函数consume/3注册消费者并建立投递上下文credit/6由消费者侧确认后返还信用额度quorum queue 依据信用额度决定是否继续投递cancel/3移除消费者deliver/3执行实际的消息投递。当消费者频繁上线/下线即consumer churn时信用额度的发放与回收、投递游标的推进之间存在竞态窗口。federation 链接这类上游消费者 下游写入的组合会放大该竞态上游链接以消费者身份从源头队列拉取消息一旦下游 quorum queue 的消费者状态在 churn 期间被错误记账投递调度就可能停滞出现队列中有消息但消费者收不到的现象。3.12.4的核心修复即针对该投递记账路径进行校正确保消费者流失不会导致消息滞留。验证与排查建议升级到3.12.4后若之前遇到 federation 下游 quorum queue 消息积压但无消费者消费的异常可先通过管理 UI 或 CLI 检查队列messages_ready与messages_unacknowledged的分布是否异常federation 链接状态是否处于running可用rabbitmqctl list_federation_links查看。Management 插件新增 quorum queue 副本管理操作的禁用开关变更内容3.12.4为 Management 插件HTTP API引入了新能力quorum queue 副本管理操作可以通过配置整体禁用。此项由 SimonUngeAWS贡献对应 PR 编号#9151。该能力的典型使用场景是副本的增删add/delete replica、扩缩容grow/shrink由平台团队或自动化工具统一管理不应暴露给普通集群用户。通过一个配置开关即可让管理 API 对这些操作直接返回方法不允许405。源码实现一处配置、四处入口仓库源码中该开关的读取逻辑集中在 deps/rabbitmq_management/src/rabbit_mgmt_features.erlis_qq_replica_operations_disabled() - get_restriction([quorum_queue_replica_operations, disabled]).其中get_restriction/1从rabbitmq_management应用的restrictions环境变量中深度取值默认false不限制。管理插件共有 4 个与 quorum queue 副本操作相关的 REST 处理器位于 deps/rabbitmq_management/src/它们各自在is_authorized/2中统一检查该开关一旦置为true即返回 405 并附带提示信息 Broker settings disallow quorum queue replica operations.处理器模块对应 HTTP 端点方法rabbit_mgmt_wm_quorum_queue_replicas_add_member.erl/queues/quorum/:vhost/:queue/replicas/addPOSTrabbit_mgmt_wm_quorum_queue_replicas_delete_member.erl/queues/quorum/:vhost/:queue/replicas/deleteDELETErabbit_mgmt_wm_quorum_queue_replicas_grow.erl/queues/quorum/replicas/on/:node/growPOSTrabbit_mgmt_wm_quorum_queue_replicas_shrink.erl/queues/quorum/replicas/on/:node/shrinkDELETE以上端点在 deps/rabbitmq_management/src/rabbit_mgmt_dispatcher.erl 第 160–163 行完成路由注册。以add_member为例其授权逻辑如下is_authorized(ReqData, Context) - case rabbit_mgmt_features:is_qq_replica_operations_disabled() of true - rabbit_mgmt_util:method_not_allowed(Broker settings disallow quorum queue replica operations., ReqData, Context); false - rabbit_mgmt_util:is_authorized_admin(ReqData, Context) end.即开关打开时直接拒绝开关关闭默认时仍要求管理员权限is_authorized_admin。注意grow/shrink这类集群级操作基于rabbit_quorum_queue:grow/5与rabbit_quorum_queue:shrink_all/1并支持strategy节点放置策略与membershippromotable/non_promotable参数add/delete则是针对单队列的成员操作基于rabbit_quorum_queue:add_member/5与delete_member/3。配置方法该开关的配置项已写入管理插件配置 schemadeps/rabbitmq_management/priv/schema/rabbitmq_management.schema 第 735–740 行%% Disables add/remove/grow/shrink over API. {mapping, management.restrictions.quorum_queue_replica_operations.disabled, rabbitmq_management.restrictions.quorum_queue_replica_operations.disabled, [ {datatype, boolean}, {include_default, false} ]}.在rabbitmq.conf中启用management.restrictions.quorum_queue_replica_operations.disabled true默认值未配置时视为false即不禁用。修改后需重启节点或通过配置热加载使rabbitmq_management应用生效。同系列还有management.restrictions.operator_policy_changes.disabled禁用通过 API 修改 operator policyschema 第 730–733 行两者共用restrictions机制逻辑上同源于rabbit_mgmt_features:is_op_policy_updating_disabled/0。需要说明的是该开关只作用于 Management HTTP API通过 CLI如rabbitmq-queues add_member等命令执行的副本管理不受影响——这与平台团队使用工具管理副本的设计意图一致。Federation 插件quorum queue 链接卡死修复问题描述3.12.4修复了队列 federation 的一个卡死问题连接 quorum queue 的 federation 链接可能进入停滞状态即使上游没有其他消费者也不再继续传输消息。对应 PR 编号#9158。原因关联与源码定位该问题与前述消费者流失修复issue#9151同源federation 链接在下游以消费者身份存在当链接因上游或下游 quorum queue 状态变化而重建link restart时旧的消费者信用与投递状态若未正确清理会导致链接看起来已运行但实际不再拉取消息。federation 链接的状态机与生命周期管理实现在 deps/rabbitmq_federation_common/src/ 中其中 rabbit_federation_link_sup.erl 负责链接进程的监督重启rabbit_federation_status.erl 负责链接运行状态的上报rabbit_federation_upstream.erl 定义上游连接参数。此修复与核心服务器的投递修复配合从源头消除链接重建后投递停滞的竞态。验证方式升级后可通过 Management UI 的 Federation 页面或rabbitmqctl list_federation_links观察链接状态重点检查处于running状态但messages长期不增长的链接。若之前存在该问题修复后链接会在消费者恢复后正常继续投递。LDAP AuthN/AuthZ 后端非 ASCII 字符插值修复问题描述3.12.4修复了 LDAP 认证/授权插件对非 ASCII 字符如中文、日文、带变音符号的拉丁字符等值插值不正确的问题。对应 issue 编号#9059。源码实现解读LDAP 插值逻辑位于 deps/rabbitmq_auth_backend_ldap/src/rabbit_auth_backend_ldap_util.erlfill/2负责将${username}、${user_dn}等模板变量替换为实际值替换时会对\与做转义to_repl/1避免注入到 LDAP 过滤器或 ACL 字符串parse_query/1解析 LDAP 查询表达式时会先将二进制输入通过rabbit_data_coercion:to_unicode_charlist/1转换为 Unicode 字符列表再交由erl_scan进行词法分析。非 ASCII 修复的关键在于此前对用户名、DN 等值的替换可能在字符编码转换环节丢失或错误编码非 ASCII 字节序列导致生成错误的 LDAP 查询过滤器或绑定 DN修复后插值路径统一走 Unicode 转换确保含非 ASCII 字符的用户名在uid${username}、DN 模板以及 Active Directory 的Domain\User拆分get_active_directory_args/1提供ad_domain、ad_user附加模板参数等场景下都能正确匹配。影响范围该修复影响所有使用 LDAP 后端且用户名/组名含非 ASCII 字符的部署包括LDAP 认证user_dn_pattern 等模板中的${username}插值LDAP 授权组名、标签查询过滤器中的值插值Active Directory 集成场景下的域用户解析。依赖升级与源码归档3.12.4没有依赖升级Dependency Upgrades: None in this release。关于源码获取发布说明特别提醒需要获取整个发行版源码时应下载rabbitmq-server-3.12.4.tar.xz归档而不是 GitHub 自动生成的源码 tarball。这一点对想要完整复现构建包含全部 tier 1 内置插件的开发者尤其重要。本仓库即对应开源版 RabbitMQ 的完整源码树包含核心服务器与 tier 1 内置插件位于deps/目录下如 deps/rabbit/、deps/rabbitmq_management/、deps/rabbitmq_federation_common/、deps/rabbitmq_auth_backend_ldap/。小结3.12.4虽然是一个典型的维护版本但四个修复点各自切中生产环境的真实痛点Core Server消除 quorum queue 消费者流失导致的投递遗漏惠及 federation 下游队列Management 插件新增management.restrictions.quorum_queue_replica_operations.disabled开关支持平台团队收回副本管理权限Federation 插件修复 quorum queue federation 链接卡死配合核心修复保证消息持续流动LDAP 插件修复非 ASCII 用户名插值完善多语言环境的认证授权兼容性。升级路径上3.12.4要求 Erlang 25 及以上从 3.11.x 或更早版本升级时务必先阅读 3.12.0 发布说明 的升级章节再执行集群升级。对于使用 Management HTTP API 管理 quorum queue 副本的团队建议在升级后按需评估是否开启新的副本操作禁用开关以收紧平台安全边界。【免费下载链接】rabbitmq-serverOpen source RabbitMQ: core server and tier 1 (built-in) plugins项目地址: https://gitcode.com/gh_mirrors/ra/rabbitmq-server创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
手持刀行为检测数据集4381张:YOLOv8训练调参避坑指南 简介:本资源为面向YOLO系列算法的手持刀行为检测数据集,适用于安防监控、智能视频分析等场景下的目标检测模型训练与验证,适合具备一定深度学习基础、需要快速搭建刀具识别实验的开发者与研究人员。压缩包共2000个文件,以xml标注文… · 2026/9/23 23:50:31
SAP销售BOM配置全解析:从后台六件套到前台VA01-VF01实操与避坑 简介:这份PDF面向SAP SD顾问、ERP实施人员及企业内部关键用户,聚焦销售BOM这一特殊业务场景的配置与落地。内容以“盒装综合礼品”为例,完整梳理了从业务前提、后台配置到前台操作的全链路:涵盖可用性检查中成品与组件的差异化设置… · 2026/9/23 23:50:18
基于深度学习的海上渔民捕鱼方式检测:围网、刺网、拖网分类实战 简介:这份资源面向深度学习与计算机视觉方向的初学者及中级实践者,围绕海上渔民捕鱼方式识别这一图像分类任务,提供围网、刺网和拖网三类作业方式的检测方案,可用于渔业管理、生态保护研究及课程项目实践。压缩包共14个文件&#… · 2026/9/23 23:50:00
免费小游戏平台实测:Poki、itch.io、7k7k哪个更好玩? 很多人一到休息时间就不知道该玩点什么,正经大作玩不动,手机App又总觉得越做越重,光是安装包和注册流程就能劝退一半人。其实我一直觉得,真正适合大多数人消遣的,往往是那些打开就能玩、关掉也不心疼的免费小游戏平台。… · 2026/9/24 0:38:26
联邦学习攻击防御复现:从论文到可运行代码的闭环路径 简介:本资源是一份面向计算机及相关专业本科生的联邦学习安全方向毕业设计实践包,聚焦于论文级攻击防御方案的代码复现与工程落地,适用于毕设选题、课程设计、AI安全入门及科研验证场景。压缩包含184个文件,主体为109个Python源码… · 2026/9/24 0:38:26
C++ std::prev详解:告别`--v.end()`的迭代器安全回退 1. 为什么需要这个函数:从*(--v.end())的隐患说起我之前在review同事代码时看到这样一行:auto it --v.end();他当时想拿vector的最后一个元素,这段代码确实能编译、能运行,在std::vector上表现得很好。我当时问了他一句ÿ… · 2026/9/24 0:38:20
深入解析onblur与onchange:从触发机制到easyui日期控件实战 1. 表单交互的隐形骨架:为什么这两个事件值得单独拎出来讲做前端开发的人,几乎每天都在和表单打交道。输入框、下拉框、日期选择器、文件上传,这些控件构成了用户与系统之间最基础的对话通道。但很多人写了几年业务代码,对onblur和… · 2026/9/24 0:38:20
岩石表面矿物质检测:YOLOv8数据集训练与避坑指南 简介:一套面向岩石表面矿物质检测的YOLO格式目标检测数据集,适合地质学研究者和计算机视觉开发者用于矿物识别、目标检测模型训练与算法验证。资源共2000个文件,压缩包约59.08MB,包含1138个txt标签文件、861张jpg岩石图像和1个Pyt… · 2026/9/24 0:38:20
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44