后端消息队列消息路由【免费下载链接】rabbitmq-serverOpen source RabbitMQ: core server and tier 1 (built-in) plugins项目地址https://gitcode.com/gh_mirrors/ra/rabbitmq-server点击查看免费下载RabbitMQ3.10.10是3.10.x系列的一个维护版本maintenance release聚焦于修复经典镜像队列classic mirrored queues与 MQTT 插件在特定场景下的缺陷并同步更新了 Erlang 运行时版本要求。本文以 release-notes/3.10.10.md 为核心结合仓库源码逐一剖析每一项修复背后的实现细节、影响范围与升级注意事项帮助读者在升级或排查问题时快速定位。版本定位与升级前提3.10.10属于3.10.x发布系列属于维护版本不带新增功能主要目的是修复缺陷。如果从3.10.0之前的版本升级请先参考 v3.10.0 release notes 中的升级章节upgrade section按步骤完成过渡升级不能直接跨版本跳级。本版本的另一个关键信息是 Erlang 运行时要求最低支持版本Erlang 23 已到达其支持终点end of support因此本版本要求Erlang 24.2 或更高版本启动硬约束在更老版本的 Erlang 上节点将无法启动Nodes will fail to start这不是警告而是硬性失败推荐版本Erlang 25原因有三在 ARM64 架构上性能提升明显支持各架构下的火焰图flame graphs性能剖析包含最新的 TLS 1.3 实现。更详细的版本对应关系可参考仓库中的 docs/COMPATIBILITY.md 与 docs/compatibility.json。核心服务器修复部分回滚不安全的节点间通信优化问题背景本次修复部分回滚了一项被判定为不安全的节点间通信优化原优化见 PR #3865 对应的优化逻辑该优化可能影响经典镜像队列的操作顺序operation ordering进而破坏队列语义。社区贡献感谢 bording 提供了可自动复现该问题的工具链使得问题得以定位并验证修复效果。当前实现佐证经典镜像队列的节点间协调依赖rabbit_mirror_queue_misc等模块参见 deps/rabbit/src/rabbit_mirror_queue_misc.erl队列进程之间的消息投递与确认通过delegate:invoke_no_result/2等机制进行见 deps/rabbit/src/rabbit_classic_queue.erl。回滚该优化后节点间通信恢复到更保守的顺序保证代价是部分场景下的吞吐优化被放弃换取镜像队列操作的确定性。对运维的影响正在使用经典镜像队列policy 中ha-mode: exactly等镜像策略的环境建议尽快升级到本版本以避免潜在的乱序风险。经典镜像队列 Leader 过度发放 Credit 导致负载不均问题背景经典镜像队列的 Leader 副本向 Follower 副本发放了过多的 credit信用额度导致各副本之间的负载和内存占用不均——部分副本收到的消息量远大于其他副本造成热点。Credit 机制在源码中的体现经典队列的 credit 流控贯穿rabbit_channel与队列进程之间的信用协商通道通过credit/6接口向队列进程发送{credit, self(), Ctag, DeliveryCountRcv, LinkCreditRcv, Drain}请求见 deps/rabbit/src/rabbit_classic_queue.erl队列进程在投递消息时通过credit_flow:send(QPid)进行信用计数见 deps/rabbit/src/rabbit_classic_queue.erl处理完 credit 请求后通过send_credit_reply/7返回#credit_reply{ctag, delivery_count, credit, avail, drain}结构见 deps/rabbit/src/rabbit_classic_queue.erl。本次修复调整了 Leader 向 Follower 发放 credit 的额度策略使消息在各副本间更均匀地分布从而均衡内存占用与 CPU 负载。对于多节点、高吞吐镜像队列集群这一修复能直接缓解单副本内存暴涨的告警场景。集群内通信链路指标采集器异常修复问题背景当对端节点重启、集群内部 peer 连接刚刚重建re-established时intra-cluster communication link 的指标采集器可能抛出异常导致相关指标缺失或采集任务中断。影响场景滚动升级、单节点重启、网络分区恢复后集群内节点间连接会频繁重建此时如果指标采集器异常监控面板上的链路指标如 inter-node link 的发送/接收字节数会出现空洞。修复效果本次修复让指标采集器在 peer 连接重建的竞态窗口内也能安全运行不再抛出异常保证 Prometheus 等监控数据连续可靠。MQTT 插件修复维护模式下错误地关闭了集群范围的全部 MQTT 连接问题背景当节点进入维护模式maintenance mode时本应只关闭本节点本地的 MQTT 客户端连接但修复前的实现错误地关闭了集群范围内所有节点的 MQTT 客户端连接导致维护一个节点时其他健康节点上的 MQTT 客户端也被强制断开影响面远超预期。源码实现佐证修复后的实现位于 MQTT 插件的内部事件处理器中deps/rabbitmq_mqtt/src/rabbit_mqtt_internal_event_handler.erlhandle_event({event, maintenance_connections_closed, _Info, _, _}, ?STATE) - {ok, NConnections} rabbit_mqtt:close_local_client_connections(maintenance), ?LOG_WARNING(Closed ~b local (Web) MQTT client connections, [NConnections]), {ok, ?STATE};关键点在于close_local_client_connections/1——从函数命名和调用语义可以看出它只处理本地节点维护的客户端连接并返回关闭数量NConnections用于日志告警。这正是对cluster-wide 误关闭缺陷的针对性修复事件在各节点本地触发各节点只关闭自己维护的连接。事件触发链路该事件由rabbit_maintenance在节点进入维护模式drain时通过rabbit_event:notify(maintenance_connections_closed, ...)广播见 deps/rabbit/src/rabbit_maintenance.erl同时会先关闭本地 AMQP 客户端连接并挂起所有监听器。MQTT 插件的事件处理器订阅该事件后仅对本节点的 MQTT 连接执行关闭从而避免波及集群其他节点。连接关闭的底层行为本地连接关闭由rabbit_mqtt_reader的close_connection/2触发见 deps/rabbitmq_mqtt/src/rabbit_mqtt_reader.erl对maintenance这一关闭原因读者进程会向客户端发送 MQTT 断开包断开码为?RC_SERVER_SHUTTING_DOWN0x8BServer shutting down见 deps/rabbitmq_mqtt/src/rabbit_mqtt_reader.erl随后以{shutdown, {disconnect, server_initiated}}停止进程。这样 MQTT 客户端收到明确的服务端关闭原因可以按 MQTT 规范进行优雅重连配合clean session语义由客户端自行决策。运维建议对使用 MQTT 插件的集群执行维护操作如滚动升级、节点隔离时升级到3.10.10后维护模式只会影响被维护节点上的 MQTT 连接集群其他节点的 MQTT 客户端保持在线业务中断面大幅缩小。依赖升级本版本没有依赖升级Dependency Upgrades: None in this release因此升级带来的回归风险主要来自上述代码修复本身依赖层面的兼容性无需额外评估。获取完整源码要获取整个发行版的源代码请下载名为rabbitmq-server-3.10.10.tar.xz的归档文件而不要使用 GitHub 自动生成的源码 tarball——前者包含完整的构建依赖与子模块如deps/下的全部插件后者可能因子模块引用不完整而导致构建失败。升级检查清单检查项要求Erlang 版本≥ 24.2推荐 25ARM64 性能、火焰图、最新 TLS 1.3跨版本升级从 3.10.0 之前版本升级时先完成过渡版本升级经典镜像队列修复 credit 发放与节点间通信顺序问题建议升级MQTT 插件修复维护模式误关集群连接维护操作影响面更可控依赖无变化无需额外兼容性验证总结3.10.10虽然是一个小版本维护发布但其中两项修复对生产环境价值明显一是经典镜像队列在节点间通信顺序与 credit 发放上的稳定性修复直接关系到镜像队列的数据一致性与负载均衡二是 MQTT 插件在维护模式下误伤整个集群连接的缺陷修复让维护操作真正实现局部可控。配合 Erlang 24.2 的最低版本门槛建议所有使用镜像队列或 MQTT 插件的3.10.x用户尽快规划升级并参照 release-notes 目录下的其他版本说明制定升级路径。RabbitMQ 3.10.10 维护版发布解析经典镜像队列、MQTT 维护模式修复与 Erlang 版本要求RabbitMQ3.10.10是3.10.x系列的一个维护版本maintenance release聚焦于修复经典镜像队列classic mirrored queues与 MQTT 插件在特定场景下的缺陷并同步更新了 Erlang 运行时版本要求。本文以 release-notes/3.10.10.md 为核心结合仓库源码逐一剖析每一项修复背后的实现细节、影响范围与升级注意事项帮助读者在升级或排查问题时快速定位。版本定位与升级前提3.10.10属于3.10.x发布系列属于维护版本不带新增功能主要目的是修复缺陷。如果从3.10.0之前的版本升级请先参考 v3.10.0 release notes 中的升级章节upgrade section按步骤完成过渡升级不能直接跨版本跳级。本版本的另一个关键信息是 Erlang 运行时要求最低支持版本Erlang 23 已到达其支持终点end of support因此本版本要求Erlang 24.2 或更高版本启动硬约束在更老版本的 Erlang 上节点将无法启动Nodes will fail to start这不是警告而是硬性失败推荐版本Erlang 25原因有三在 ARM64 架构上性能提升明显支持各架构下的火焰图flame graphs性能剖析包含最新的 TLS 1.3 实现。更详细的版本对应关系可参考仓库中的 docs/COMPATIBILITY.md 与 docs/compatibility.json。核心服务器修复部分回滚不安全的节点间通信优化问题背景本次修复部分回滚了一项被判定为不安全的节点间通信优化原优化见 PR #3865 对应的优化逻辑该优化可能影响经典镜像队列的操作顺序operation ordering进而破坏队列语义。社区贡献感谢 bording 提供了可自动复现该问题的工具链使得问题得以定位并验证修复效果。当前实现佐证经典镜像队列的节点间协调依赖rabbit_mirror_queue_misc等模块参见 deps/rabbit/src/rabbit_mirror_queue_misc.erl队列进程之间的消息投递与确认通过delegate:invoke_no_result/2等机制进行见 deps/rabbit/src/rabbit_classic_queue.erl。回滚该优化后节点间通信恢复到更保守的顺序保证代价是部分场景下的吞吐优化被放弃换取镜像队列操作的确定性。对运维的影响正在使用经典镜像队列policy 中ha-mode: exactly等镜像策略的环境建议尽快升级到本版本以避免潜在的乱序风险。经典镜像队列 Leader 过度发放 Credit 导致负载不均问题背景经典镜像队列的 Leader 副本向 Follower 副本发放了过多的 credit信用额度导致各副本之间的负载和内存占用不均——部分副本收到的消息量远大于其他副本造成热点。Credit 机制在源码中的体现经典队列的 credit 流控贯穿rabbit_channel与队列进程之间的信用协商通道通过credit/6接口向队列进程发送{credit, self(), Ctag, DeliveryCountRcv, LinkCreditRcv, Drain}请求见 deps/rabbit/src/rabbit_classic_queue.erl队列进程在投递消息时通过credit_flow:send(QPid)进行信用计数见 deps/rabbit/src/rabbit_classic_queue.erl处理完 credit 请求后通过send_credit_reply/7返回#credit_reply{ctag, delivery_count, credit, avail, drain}结构见 deps/rabbit/src/rabbit_classic_queue.erl。本次修复调整了 Leader 向 Follower 发放 credit 的额度策略使消息在各副本间更均匀地分布从而均衡内存占用与 CPU 负载。对于多节点、高吞吐镜像队列集群这一修复能直接缓解“单副本内存暴涨”的告警场景。集群内通信链路指标采集器异常修复问题背景当对端节点重启、集群内部 peer 连接刚刚重建re-established时intra-cluster communication link 的指标采集器可能抛出异常导致相关指标缺失或采集任务中断。影响场景滚动升级、单节点重启、网络分区恢复后集群内节点间连接会频繁重建此时如果指标采集器异常监控面板上的链路指标如 inter-node link 的发送/接收字节数会出现空洞。修复效果本次修复让指标采集器在 peer 连接重建的竞态窗口内也能安全运行不再抛出异常保证 Prometheus 等监控数据连续可靠。MQTT 插件修复维护模式下错误地关闭了集群范围的全部 MQTT 连接问题背景当节点进入维护模式maintenance mode时本应只关闭本节点本地的 MQTT 客户端连接但修复前的实现错误地关闭了集群范围内所有节点的 MQTT 客户端连接导致维护一个节点时其他健康节点上的 MQTT 客户端也被强制断开影响面远超预期。源码实现佐证修复后的实现位于 MQTT 插件的内部事件处理器中deps/rabbitmq_mqtt/src/rabbit_mqtt_internal_event_handler.erlhandle_event({event, maintenance_connections_closed, _Info, _, _}, ?STATE) - {ok, NConnections} rabbit_mqtt:close_local_client_connections(maintenance), ?LOG_WARNING(Closed ~b local (Web) MQTT client connections, [NConnections]), {ok, ?STATE};关键点在于close_local_client_connections/1——从函数命名和调用语义可以看出它只处理本地节点维护的客户端连接并返回关闭数量NConnections用于日志告警。这正是对“cluster-wide 误关闭”缺陷的针对性修复事件在各节点本地触发各节点只关闭自己维护的连接。事件触发链路该事件由rabbit_maintenance在节点进入维护模式drain时通过rabbit_event:notify(maintenance_connections_closed, ...)广播见 deps/rabbit/src/rabbit_maintenance.erl同时会先关闭本地 AMQP 客户端连接并挂起所有监听器。MQTT 插件的事件处理器订阅该事件后仅对本节点的 MQTT 连接执行关闭从而避免波及集群其他节点。连接关闭的底层行为本地连接关闭由rabbit_mqtt_reader的close_connection/2触发见 deps/rabbitmq_mqtt/src/rabbit_mqtt_reader.erl对maintenance这一关闭原因读者进程会向客户端发送 MQTT 断开包断开码为?RC_SERVER_SHUTTING_DOWN0x8BServer shutting down见 deps/rabbitmq_mqtt/src/rabbit_mqtt_reader.erl随后以{shutdown, {disconnect, server_initiated}}停止进程。这样 MQTT 客户端收到明确的服务端关闭原因可以按 MQTT 规范进行优雅重连配合clean session语义由客户端自行决策。运维建议对使用 MQTT 插件的集群执行维护操作如滚动升级、节点隔离时升级到3.10.10后维护模式只会影响被维护节点上的 MQTT 连接集群其他节点的 MQTT 客户端保持在线业务中断面大幅缩小。依赖升级本版本没有依赖升级Dependency Upgrades: None in this release因此升级带来的回归风险主要来自上述代码修复本身依赖层面的兼容性无需额外评估。获取完整源码要获取整个发行版的源代码请下载名为rabbitmq-server-3.10.10.tar.xz的归档文件而不要使用 GitHub 自动生成的源码 tarball——前者包含完整的构建依赖与子模块如deps/下的全部插件后者可能因子模块引用不完整而导致构建失败。升级检查清单检查项要求Erlang 版本≥ 24.2推荐 25ARM64 性能、火焰图、最新 TLS 1.3跨版本升级从 3.10.0 之前版本升级时先完成过渡版本升级经典镜像队列修复 credit 发放与节点间通信顺序问题建议升级MQTT 插件修复维护模式误关集群连接维护操作影响面更可控依赖无变化无需额外兼容性验证总结3.10.10虽然是一个小版本维护发布但其中两项修复对生产环境价值明显一是经典镜像队列在节点间通信顺序与 credit 发放上的稳定性修复直接关系到镜像队列的数据一致性与负载均衡二是 MQTT 插件在维护模式下“误伤”整个集群连接的缺陷修复让维护操作真正实现“局部可控”。配合 Erlang 24.2 的最低版本门槛建议所有使用镜像队列或 MQTT 插件的3.10.x用户尽快规划升级并参照 release-notes 目录下的其他版本说明制定升级路径。赞分享后端消息队列消息路由【免费下载链接】rabbitmq-serverOpen source RabbitMQ: core server and tier 1 (built-in) plugins项目地址https://gitcode.com/gh_mirrors/ra/rabbitmq-server点击查看免费下载相关推荐RabbitMQ 3.11.2 维护版本解析镜像队列稳定性修复与 MQTT 维护模式行为修正RabbitMQ 3.11.2 维护版本解析镜像队列稳定性修复与 MQTT 维护模式行为修正 RabbitMQ 3.11.2 是 3.11.x 发布系列中的一后端消息队列消息路由RabbitMQ 3.10.24 维护版本深度解读CQv1 队列索引恢复修复与 Erlang 版本要求RabbitMQ 3.10.24 维护版本深度解读CQv1 队列索引恢复修复与 Erlang 版本要求 本文以 RabbitMQ 3.10.x 系列的第 24后端消息队列消息路由RabbitMQ 3.10.17 维护版本解析Erlang 版本要求与 Management UI Admin 页签修复RabbitMQ 3.10.17 维护版本解析Erlang 版本要求与 Management UI Admin 页签修复 RabbitMQ 3.10.17 是后端消息队列消息路由创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
