ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

RabbitMQ 3.11.8 维护版本解析:hash_password 密码哈希、check_port_connectivity 地址参数与插件稳定性修复

RabbitMQ 3.11.8 维护版本解析:hash_password 密码哈希、check_port_connectivity 地址参数与插件稳定性修复 后端消息队列消息路由【免费下载链接】rabbitmq-serverOpen source RabbitMQ: core server and tier 1 (built-in) plugins项目地址https://gitcode.com/gh_mirrors/ra/rabbitmq-server点击查看免费下载RabbitMQ3.11.8是3.11.x发布系列中的一个维护版本面向生产环境提供增量式稳定性修复与易用性增强。本文以该版本的官方发布说明为骨架结合本仓库rabbitmq-server 主仓库含核心服务与 tier 1 内置插件中的 CLI、rabbit_common 与 STOMP 插件源码逐项剖析本版本的四个重点新增的rabbitmqctl hash_password命令、rabbitmq-diagnostics check_port_connectivity的--address参数、core server 对超小消息场景的 stream 吞吐优化以及 Management / AMQP 1.0 / STOMP 三个插件的 bug 修复。读完本文你将掌握 3.11.8 的全部变更内容、对应命令的精确用法与底层实现原理并能据此评估是否值得将节点升级到该版本。版本定位与 Erlang 25 基线3.11.8属于3.11.x维护系列不引入破坏性的架构变更而是在既有功能上做增量修复与增强。需要特别注意的是自 3.11.0 起 RabbitMQ 已要求 Erlang 25 作为最低支持版本在更老的 Erlang 发行版上节点将拒绝启动nodes will fail to start。Erlang 25 基线带来的收益包括ARM64 架构上明显改善的性能全架构可用的基于 flame graph 的 profiling 支持RabbitMQ 3.11 全用户可用的最新 TLS 1.3 实现。因此如果你计划升级到 3.11.8请先确认运行环境的 Erlang/OTP 版本满足 25 及以上的要求再执行升级动作。若当前版本低于 3.11.0应参照 3.11.0 的升级说明完成跨版本升级而非直接跳跃到 3.11.8。Core Serverstream 超小消息吞吐优化本次 core server 的增强项只有一个但针对的是非常具体的负载画像Stream throughput improvements for workloads with a lot of very small (say, less than 10 bytes) messages.即当工作负载包含大量极小消息例如小于 10 字节时stream 的吞吐得到改善。这类消息常见于遥测、指标点、信号量一类的高频微载荷场景消息体开销占比极小吞吐瓶颈往往落在帧/批次处理而非序列化上因此该优化专注于减少此类负载下的处理损耗。此项改动位于 core server 内部 stream 处理路径关联的 stream 实现模块见 deps/rabbitmq_stream/src 目录对本版本而言它不改变任何对外配置或 API属于透明的性能收益升级后无需额外配置即可生效。CLI 新特性一rabbitmqctl hash_password3.11.8 为rabbitmqctl新增了hash_password命令用于离线计算明文密码的哈希值。这在需要以预哈希形式创建用户例如脚本化批量导入用户、或在不同节点间迁移用户凭据而不暴露明文时非常有用。基本用法rabbitmqctl hash_password cleartext_password [--hashing-algorithm algorithm]cleartext_password要哈希的明文密码--hashing-algorithm可选指定哈希算法缺省时使用节点配置的默认哈希模块。命令在无位置参数时rabbitmqctl hash_password会交互式提示输入密码提示符Password:适合不希望密码出现在 shell 历史中的场景。支持的哈希算法从 hash_password_command.ex 的源码映射表可见该命令支持以下算法及其别名算法参数值底层模块sha256/sha-256rabbit_password_hashing_sha256sha512/sha-512rabbit_password_hashing_sha512md5rabbit_password_hashing_md5pbkdf2_sha256/pbkdf2-sha256rabbit_password_hashing_pbkdf2_sha256# 使用默认算法sha256 rabbitmqctl hash_password my-secret # 显式指定 PBKDF2-SHA256 rabbitmqctl hash_password my-secret --hashing-algorithm pbkdf2_sha256底层实现加盐与哈希流程命令的实现逻辑位于 hash_password_command.ex未指定算法时调用:rabbit_password.hash/1使用节点默认模块指定算法时先通过hashing_module/1将字符串参数解析为对应 Erlang 模块再调用:rabbit_password.hash/2最后对结果做Base64.encode64/1输出。加盐与哈希的底层实现在 rabbit_password.erlhash(Cleartext) - hash(hashing_mod(), Cleartext). hash(HashingMod, Cleartext) - SaltBin generate_salt(HashingMod), Hash salted_hash(HashingMod, SaltBin, Cleartext), SaltBin/binary, Hash/binary.即输出格式为Salt || Hash的拼接二进制再经 Base64 编码。盐由crypto:strong_rand_bytes/1生成rabbit_password.erl默认盐长度为 4 字节若算法模块导出salt_length/0如 PBKDF2 导出 16则使用模块声明的长度。默认哈希模块由应用环境变量password_hashing_module决定未配置时回退到rabbit_password_hashing_sha256见 rabbit_password.erl。对于pbkdf2_sha256rabbit_password_hashing_pbkdf2_sha256.erl 显示其使用600,000 次迭代符合 OWASP 2023 对 PBKDF2-HMAC-SHA256 的最低建议、16 字节盐、32 字节密钥长度源码注释特别提醒迭代次数未随哈希一起存储不要就地修改该常量否则所有既有 PBKDF2 用户将无法通过认证如需调整应引入新模块。校验规则与预哈希用法命令的validate/2做了两类校验hash_password_command.ex位置参数超过 1 个时报too_many_args空字符串密码被拒绝报bad_argument传入了--hashing-algorithm但解析不到对应模块时报unsupported hashing algorithm: alg。得到哈希值后配合rabbitmqctl add_user的--pre-hashed-password选项即可创建使用预哈希密码的用户。该流程在 add_user_command_test.exs 中有端到端测试佐证先用HashPasswordCommand.hash_password(pwd, %{})生成哈希再以pre_hashed_password: true创建用户最后用明文密码通过authenticate_user验证认证成功。CLI 新特性二check_port_connectivity 新增 --address 参数rabbitmq-diagnostics check_port_connectivity用于对目标节点的所有活跃监听器逐一发起 TCP 连接并立即关闭作为健康检查手段连接失败或认证错误时返回非零退出码。3.11.8 为其新增可选标志--address别名-a使检查改为连接指定的 IP 地址而不是解析节点主机名。适用场景当目标节点配置为仅监听某个网卡接口例如仅监听内网 IP 或仅监听 IPv6 地址时默认的主机名解析可能解析到错误的地址族或无法触达的地址导致健康检查误报。此时可用--address强制指定目标地址# 使用 IPv4 回环地址 rabbitmq-diagnostics check_port_connectivity --address 127.0.0.1 # 使用 IPv6 回环地址 rabbitmq-diagnostics check_port_connectivity --address ::1实现细节从 check_port_connectivity_command.ex 源码可见其行为通过 RPC 调用:rabbit_networking.active_listeners/0获取节点活跃监听器列表过滤出本节点监听器listeners_on/2每个监听器以check_listener_connectivity/4单独建连测试总超时默认 30 秒default_timeout 30_000并按监听器数量均分check_port_connectivity_command.ex连接逻辑位于 diagnostics_helpers.ex--address未指定时从节点名如rabbithostname中提取之后的主机名部分作为连接目标指定后则直接使用该 IP。建连时先尝试默认地址族失败后再尝试:inet6兼顾 IPv4/IPv6 双栈环境输出信息会明确标注连接方式using node hostname resolution或using target_ip for target IP address便于在日志中区分两种模式--formatter json模式下则返回result、node、listeners或failures字段。# 指定 IPv6 地址并限制总超时 10 秒 rabbitmq-diagnostics check_port_connectivity --address ::1 --timeout 10Management 插件两个 bug 修复用户过滤与分页组合失效Management UI 中用户列表过滤user filtering与分页pagination组合使用时行为不符合预期——过滤条件与分页参数在服务端交互时出错导致过滤后的列表分页结果不正确。本次修复后两者可正常协同工作。Channel 详情 API 的 JSON 字段格式Management HTTP API 的 channel 详情接口channel detail在返回 JSON 时对某个字段值存在格式错误的问题。本次修复保证了字段值按正确类型/格式序列化输出。该修复位于 Management 插件deps/rabbitmq_management/src的 HTTP 响应渲染路径中修复后依赖该 API 的客户端与监控脚本将收到规范化的 JSON。AMQP 1.0 插件修复连接抖动导致的内存泄漏AMQP 1.0 插件deps/rabbitmq_amqp1_0/src此前存在一个内存泄漏问题高频的连接建立/断开connection churn场景下与连接生命周期相关的资源未被完整释放长时间运行会造成内存持续增长。本次修复确保连接终止路径上的资源得到彻底清理。对于大量使用短连接或连接频繁重连的 AMQP 1.0 客户端负载升级到 3.11.8 可消除该泄漏点。STOMP 插件订阅 AMQP 0-9-1 交换机的临时队列语义修正STOMP 插件deps/rabbitmq_stomp/src修复了一处与文档承诺不符的行为STOMP client subscriptions to a destination that is an AMQP 0-9-1 exchange now declares auto-delete, exclusive queues (previously only auto-delete).当 STOMP 客户端订阅一个映射到AMQP 0-9-1 交换机的 destination 时服务端会为其创建临时队列。此前该队列只声明了auto-delete而文档承诺的是auto-delete且exclusive。本次修复后与文档一致队列既是自动删除的也是排他的。从源码看队列参数的构造逻辑位于 rabbit_stomp_util.erl默认临时队列参数为[{exclusive, true}, {auto_delete, true}]仅在显式指定时才退化为[{exclusive, false}, {auto_delete, true}]订阅处理路径 rabbit_stomp_processor.erl 中未显式提供参数时同样会补上[{auto_delete, true}, {exclusive, true}]。这意味着临时队列现在同时具备排他性仅创建它的连接会话可以使用连接断开即删除避免订阅方之间互相干扰也更符合临时订阅队列的预期语义。依赖升级本版本对两个依赖做了升级osiris从1.4.2升级到1.4.3osiris 是 RabbitMQ stream 功能的底层实现库此升级与上文提到的 stream 吞吐改进直接相关thoas从0.4.1升级到1.0.0thoas 为 Erlang 的快速 JSON 解析库主要在 Management/HTTP 相关路径中使用。依赖升级随发布包一并提供无需手动干预但若你以源码方式自行构建需确保拉取到对应版本。升级到 3.11.8 的注意事项Erlang 版本3.11.x 要求 Erlang 25低于该版本的节点将无法启动升级前务必核对运行环境跨版本升级若当前版本低于 3.11.0请先阅读 3.11.0 的升级说明完成大版本迁移再进入 3.11.x 维护序列行为变更STOMP 临时队列从auto-delete变为auto-delete exclusive属于语义修正依赖旧行为的客户端应重新评估订阅模型源码获取如需获取完整发行版源码请下载名为rabbitmq-server-3.11.8.tar.xz的归档包而不是 GitHub 自动生成的 source tarball后者不包含完整构建所需的全部内容。小结3.11.8 是一个小而精的维护版本CLI 侧新增了hash_password离线计算兼容节点默认算法的密码哈希与check_port_connectivity --address按指定 IP 而非主机名做端口连通性健康检查两个实用能力core server 侧优化了 stream 在超小消息负载下的吞吐三个插件分别修复了 Management 过滤分页与 JSON 格式化、AMQP 1.0 连接抖动内存泄漏、STOMP 临时队列排他性等问题。相关实现均可在本仓库的 deps/rabbitmq_cli、deps/rabbit_common/src/rabbit_password.erl、deps/rabbitmq_stomp/src 等路径下继续深入阅读。赞分享后端消息队列消息路由【免费下载链接】rabbitmq-serverOpen source RabbitMQ: core server and tier 1 (built-in) plugins项目地址https://gitcode.com/gh_mirrors/ra/rabbitmq-server点击查看免费下载相关推荐RabbitMQ 3.10.16 维护版本解读hash_password 新命令、check_port_connectivity 增强与关键修复RabbitMQ 3.10.16 维护版本解读hash_password 新命令、check_port_connectivity 增强与关键修复 本指南基于后端消息队列消息路由4步导出微信聊天记录WeChatMsg免费开源还能生成年度聊天报告4步导出微信聊天记录WeChatMsg免费开源还能生成年度聊天报告 微信聊天记录丢了基本找不回来。但把它导出成 HTML、Word、CSV 永久保存顺手再后端消息队列消息路由RabbitMQ 3.11.2 维护版本解析镜像队列稳定性修复与 MQTT 维护模式行为修正RabbitMQ 3.11.2 维护版本解析镜像队列稳定性修复与 MQTT 维护模式行为修正 RabbitMQ 3.11.2 是 3.11.x 发布系列中的一后端消息队列消息路由创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表