后端消息队列消息路由【免费下载链接】rabbitmq-serverOpen source RabbitMQ: core server and tier 1 (built-in) plugins项目地址https://gitcode.com/gh_mirrors/ra/rabbitmq-server点击查看免费下载RabbitMQ3.11.21是3.11.x维护系列中的一个补丁版本本篇文章基于当前仓库的官方发布说明与源码逐一解析该版本在核心服务器、CLI 工具、HTTP/LDAP 认证后端等方面的修复内容并结合源码说明这些修复背后的实现逻辑、对升级运维的实际影响以及如何在集群中验证相关行为。读完本文你将掌握 3.11.21 的升级前置条件、各修复点的原理与排查方法并了解该版本依赖升级osiris 1.6.2对高可用与流队列部署的意义。版本背景与支持状态RabbitMQ3.11.21属于3.11.x发布系列release series。根据仓库中的官方发布说明该发布系列于2023 年 12 月 31 日退出社区支持goes out of community support。因此 3.11.21 是一个处于支持生命周期末期的维护版本主要用于修复已知缺陷而非引入新功能。若要从 3.11.0 之前的版本升级请参考 v3.11.0 发布说明 中的升级章节了解跨大版本升级所需的步骤与注意事项。若从 3.11.x 内部版本升级如 3.11.20 → 3.11.21则属于常规维护升级风险较低。Erlang 版本要求与兼容性该版本对 Erlang/OTP 的最低要求是Erlang 25并支持到25.3.x自 3.11.0 起RabbitMQ 以 Erlang 25 为基线节点在更旧的 Erlang 版本上将无法启动Nodes will fail to start。选择 Erlang 25 作为基线带来的收益包括ARM64 架构上的性能大幅改善、所有架构上支持基于火焰图flame graphs的性能剖析以及所有 3.11 用户可用的最新 TLS 1.3 实现。升级 3.11.21 前请务必确认运行环境满足Erlang/OTP 版本为 25.x建议 25.3.x集群中所有节点版本一致或满足滚动升级的版本跨度要求确认相关的 feature flags 状态下文会详细说明。核心服务器Core Server修复滚动升级期间诊断操作失败的问题feature flaglistener_records_in_ets问题描述在从 3.10 到 3.11 的滚动升级过程中如果listener_records_in_etsfeature flag 恰好在升级中途被启用某些诊断操作diagnostics operations可能会失败。源码依据该 feature flag 定义在 deps/rabbit/src/rabbit_core_ff.erl 中-rabbit_feature_flag( {listener_records_in_ets, #{desc Store listener records in ETS instead of Mnesia, stability required, require_level hard, depends_on [feature_flags_v2] }}).从定义可见listener_records_in_ets的作用是把监听器listener记录从 Mnesia 迁移到 ETS 存储属于required必需稳定性、hard硬性启用级别的核心 feature flag且依赖feature_flags_v2。在滚动升级过程中feature flag 启用时机与节点版本不一致时会存在读写路径不一致的窗口期这正是该诊断操作失败的根源。运维影响与建议滚动升级时建议先在所有节点升级完成后再统一启用依赖feature_flags_v2的 flags或遵循官方推荐的升级顺序避免在升级中途手工启用/禁用 feature flags可通过rabbitmqctl list_feature_flags查看当前集群中各 flag 的状态3.11.21 已修复该问题升级后诊断操作如rabbitmq-diagnostics系列命令应能正常工作。Windows 平台句柄统计不再回退到 PowerShell问题描述在 Windows 上计算节点使用的文件与套接字句柄file and socket handles数量时若系统PATH中未安装handle.exe旧版本会回退使用 PowerShell 进行统计。PowerShell 方案属于 CPU 密集型替代方案对多数安装场景而言性价比不高因此 3.11.21 移除了该回退逻辑若用户的 Windows 系统中PATH中没有安装handle.exe将只记录一次日志消息随后该节点的句柄总使用量被设置为 0。运维影响与建议Windows 部署如需准确的句柄统计请安装 Sysinternals 的handle.exe并确保其位于PATH中升级后若在管理界面或rabbitmq-diagnostics中看到句柄数为 0先检查handle.exe是否可用这是预期行为而非故障。节点维护状态未复制到所有节点的问题问题描述节点维护状态node maintenance state此前虽然可以从任意节点访问且可访问任意节点的状态但并未复制replicate到所有节点导致部分节点读取到的维护状态可能不一致。源码依据维护状态相关的实现位于 deps/rabbit/src/rabbit_maintenance.erl 与 deps/rabbit/src/rabbit_db_maintenance.erl。其中rabbit_db_maintenance提供set/1、get/1、get_consistent/1三组接口set(Status)将本地节点的维护状态写入元数据存储Khepri 路径供集群其他节点读取get(Node)使用本地查询返回指定节点的状态get_consistent(Node)使用一致性查询#{favor consistency}返回状态确保读到最新值。rabbit_maintenance的drain()流程会依次执行标记节点为 draining → 断开 federation 链接 → 挂起客户端监听器 → 关闭本地客户端连接 → 迁移元数据存储与队列领导权等是节点进入维护模式drain的完整链路。修复意义3.11.21 确保维护状态在所有节点间正确同步/复制这样在集群中任意节点查询维护状态都能得到一致结果避免出现部分节点认为节点 A 处于维护中、部分节点认为它正常的状态分裂。运维验证方式可使用rabbitmqctl await_startup、rabbitmqctl status观察节点状态维护模式相关操作可通过rabbitmqctl drain/rabbitmqctl revive触发对应rabbit_maintenance:drain/0与revive/0。CLI 工具改进--formatter json下仍输出警告的问题问题描述某些情况下即使 CLI 命令指定了--formatter json仍会输出非 JSON 格式的警告信息破坏自动化脚本对 JSON 输出的解析。修复内容3.11.21 修复了该问题确保使用json格式化器时输出符合 JSON 规范便于脚本化运维与监控系统解析。运维建议在 CI/CD 或监控脚本中调用 CLI 时统一使用--formatter json并配合rabbitmqctl/rabbitmq-diagnostics的相应命令升级后建议回归测试脚本中对--formatter json输出的解析逻辑。HTTP 与 LDAP 认证/授权后端的 AMQP 1.0 连接修复问题描述rabbitmq_auth_backend_httpHTTP 认证后端与rabbitmq_auth_backend_ldapLDAP 认证后端此前会拒绝 AMQP 1.0 客户端连接。这是这两个插件在 3.11.21 中共同修复的核心缺陷对应 GitHub issue #9043。源码依据两个后端都实现了rabbit_authn_backend行为核心入口是user_login_authentication/2与user_login_authorization/2HTTP 后端deps/rabbitmq_auth_backend_http/src/rabbit_auth_backend_http.erl 中通过proplists:get_value(rabbit_auth_backend_http, AuthProps, undefined)读取认证上下文属性实现一次认证、上下文传递的机制LDAP 后端deps/rabbitmq_auth_backend_ldap/src/rabbit_auth_backend_ldap.erl 中同样通过AuthProps属性rabbit_auth_backend_ldap/rabbit_auth_backend_cache复用已认证上下文。AMQP 1.0 连接在认证握手阶段传递的属性结构与 AMQP 0-9-1 存在差异旧版本在属性缺失或结构不符时直接返回{refused, ...}导致 AMQP 1.0 客户端被拒绝。3.11.21 修复了这两个插件对 AMQP 1.0 握手属性的兼容处理。运维影响与建议若你的集群启用了 AMQP 1.0rabbitmq_amqp1_0插件且使用 HTTP 或 LDAP 认证后端升级到 3.11.21 后 AMQP 1.0 客户端应能正常认证连接升级后建议用 AMQP 1.0 客户端如基于amqp10_client的测试程序实测认证流程若使用rabbitmq_auth_backend_cache缓存后端包装上述后端认证上下文属性rabbit_auth_backend_cache的传递同样在本次修复范围内得到保证。依赖升级3.11.21 将osiris升级到1.6.2osiris是 RabbitMQ 流Streams与 quorum 队列底层依赖的日志存储库升级到 1.6.2 修复了该库的若干缺陷对流队列、quorum 队列的高可用与性能有直接影响若你的部署大量使用流队列或 quorum 队列建议关注该版本对应的变更。源代码归档说明若需要获取整个发行版的源代码请下载名为rabbitmq-server-3.11.21.tar.xz的归档文件而不是 GitHub 自动生成的 source tarball。这一点对希望构建自定义插件或进行二次开发的用户尤为重要。升级路径与验证清单检查项说明Erlang 版本必须为 25.x建议 25.3.x否则节点无法启动升级来源3.11.0 之前升级需先阅读 v3.11.0 发布说明 的升级章节Feature flags滚动升级过程中避免中途启用/禁用依赖feature_flags_v2的 flags如listener_records_in_etsWindows 句柄统计需要handle.exe在PATH中否则句柄数显示为 0 且仅记录一次日志AMQP 1.0 外部认证若启用 HTTP/LDAP 认证后端升级后需回归 AMQP 1.0 连接测试依赖版本osiris升级至 1.6.2关注流/仲裁队列行为变化支持状态3.11.x 系列已于 2023-12-31 退出社区支持长期运行建议规划迁移至受支持的版本线总结RabbitMQ 3.11.21 作为 3.11.x 系列的维护版本核心价值体现在四个方面修复滚动升级期间因listener_records_in_ets启用时机导致的诊断失败、移除 Windows 上高 CPU 开销的 PowerShell 句柄统计回退、修复节点维护状态在集群中的复制/一致性问题以及让 AMQP 1.0 客户端在 HTTP/LDAP 认证后端下可以正常连接。同时osiris升级至 1.6.2 强化了流与 quorum 队列底层存储的稳定性。由于 3.11.x 已退出社区支持建议仍在运行 3.11 系列的生产环境尽快规划向受支持版本线的迁移并在升级前严格核对 Erlang 版本、feature flags 状态与认证后端兼容性。赞分享后端消息队列消息路由【免费下载链接】rabbitmq-serverOpen source RabbitMQ: core server and tier 1 (built-in) plugins项目地址https://gitcode.com/gh_mirrors/ra/rabbitmq-server点击查看免费下载相关推荐RabbitMQ 3.10.12 维护版发布详解Erlang 版本要求、集群健壮性修复与诊断工具提速RabbitMQ 3.10.12 维护版发布详解Erlang 版本要求、集群健壮性修复与诊断工具提速 RabbitMQ 3.10.12 是 3.10.x 发布后端消息队列消息路由RabbitMQ 3.11.1 维护版解析升级要点、Erlang 25 基线要求与关键 Bug 修复RabbitMQ 3.11.1 维护版解析升级要点、Erlang 25 基线要求与关键 Bug 修复 RabbitMQ 3.11.1 是 3.11.x 发布系后端消息队列消息路由RabbitMQ 3.8.31 维护版本发布解析升级要点、JMS Topic Exchange 修复与依赖演进RabbitMQ 3.8.31 维护版本发布解析升级要点、JMS Topic Exchange 修复与依赖演进 本篇技术指南以 release notes/3后端消息队列消息路由创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考