
后端消息队列消息路由【免费下载链接】rabbitmq-serverOpen source RabbitMQ: core server and tier 1 (built-in) plugins项目地址https://gitcode.com/gh_mirrors/ra/rabbitmq-server点击查看免费下载RabbitMQ3.7.13是一个面向 bug 修复与易用性改进的维护版本覆盖核心服务器、CLI 工具、Management 插件、Federation、Shovel、HTTP AuthN/AuthZ 后端与 Trust Store 插件等模块。本文以该版本官方 release notes 为主体结合当前仓库源码逐一展开修复原理、命令用法与升级注意事项帮助你理解每个变更背后的实现细节与实际影响。版本定位与 Erlang/OTP 兼容性要求RabbitMQ3.7.13是3.7.x系列的一个维护版本重点在于修复已知缺陷并小幅提升可用性不引入新的重大功能。该版本要求 Erlang/OTP 20.3 或更高版本。按照 2019 年 1 月起生效的 Erlang 版本支持策略本版本不再支持 Erlang/OTP 19.3。升级前请务必确认节点使用的 Erlang 版本属于受支持范围20.3.x 或 21.x并可以通过 Erlang 官方包仓库与相关工具为发行版预置最新补丁版本的 Erlang20.3.x与21.x。升级到 Erlang 21.x 的注意事项当同时进行两个升级动作——升级 RabbitMQ 到本版本、且升级 Erlang 到 21.x 时必须格外小心早于 3.7.7 的 RabbitMQ 版本其 CLI 工具在 Erlang 21 上会运行失败因此升级顺序必须是先升级 RabbitMQ再升级 Erlang绝不能颠倒。若从更早的版本升级请参阅 3.7.0 的 release notes 中的升级与兼容性说明通用升级流程可参考官方 Upgrading 指南其他版本的变更记录见 RabbitMQ change log。核心服务器Core Server变更Bug 修复1. 绑定表不同步导致的 NOT_FOUND 通道异常当 binding 表binding tables出现不同步时绑定bind与解绑unbind操作可能以NOT_FOUND通道异常失败。该问题由 rabbitmq/rabbitmq-server#1873 报告并在 #1878、#1884 两个 PR 中修复。从架构角度看RabbitMQ 中 binding 由rabbit_binding模块维护操作时会同步更新 mnesia 事务表与运行时状态。当二者不一致例如并发声明/删除时某个分支未收敛查找已存在的 binding 就会失败并向上抛出NOT_FOUND。此修复确保了 binding 查找与更新路径的一致性避免客户端在正常操作中收到意外的通道异常。2. 消除基于 topic 的授权累积性低效修复了topic-based 授权topic-based authorisation中的累积性性能问题仅影响 topic 类型交换机。该改动由 Ayanda Dube 贡献rabbitmq/rabbitmq-server#1886。topic 授权topic authorisation / topic permissions用于限制客户端向 topic 交换机发布消息或订阅某主题模式。在 3.7.13 之前每次授权检查会在内部累积不必要的工作例如重复构建或扫描匹配规则长期运行后成为可感知的开销本版本消除了这种随时间累积的低效路径。topic 权限的实现与rabbit_authz_backend及 topic 交换机的路由逻辑相关升级后 topic 交换机在开启 topic 授权时的吞吐与延迟表现更稳定。3. Proxy protocol 下 TCP 连接堆积当启用Proxy protocol且代理proxy的 TCP 连接在 Proxy protocol 头部被接收并解析之前就已关闭时会产生TCP 连接堆积rabbitmq/rabbitmq-server#1901。Proxy protocol 用于在负载均衡器与 RabbitMQ 之间传递真实客户端地址。修复前若对端在发送协议头之前断开相关 socket 未被及时清理回收修复后此类半开连接会被正确检测并释放避免文件描述符与连接资源泄漏。4. 队列删除时缺少 consumer.deleted 内部事件当队列被删除时内部事件internal events中关于消费者取消的consumer.deleted事件不再缺失rabbitmq/rabbitmq-server#1892。RabbitMQ 内部事件通过rabbit_event事件总线广播事件消费者通过rabbit_event_consumer注册并按类型过滤。在 rabbit_event_consumer.erl 中可以看到事件类型映射consumer_deleted对应二进制键consumer.deletedkey(consumer_created) - consumer.created; key(consumer_deleted) - consumer.deleted;修复前队列删除会取消其中的消费者但不会发布consumer.deleted事件导致依赖该事件做监控、指标或联动清理的插件如 rabbitmq-event-exchange 等漏报本版本补齐了这一事件发布路径。5. 连接在注册前关闭导致的连接跟踪子系统异常当连接在完成注册之前就已关闭时连接跟踪connection tracking子系统会失败并记录异常日志rabbitmq/rabbitmq-server#1898。修复后连接跟踪在注册阶段能正确处理“尚未入册即断开”的竞态避免跟踪进程崩溃与无谓的异常堆栈刷屏。增强1. 独占队列属性不匹配的报错信息更友好声明队列时若exclusive 属性独占队列与既有队列不一致现在会得到更明确、更具可操作性的错误消息rabbitmq/rabbitmq-server#1887。此前该场景的错误提示晦涩难懂难以判断根因改进后客户端可以更快定位“属性冲突导致声明失败”的问题。2. Erlang 22 前向兼容配置值加密支持更多密码套件为迎接 Erlang 22配置值加密config value encryption现在支持更多的 cipher suitesrabbitmq/rabbitmq-common#307。RabbitMQ 允许通过advanced.config中的encryption相关配置对某些敏感配置值进行加密本版本扩展了受支持的密码套件集合使其在更新版本的 Erlang 上仍能正常工作。CLI 工具变更增强1. rabbitmqctl shutdown --wait 更可靠的本地/远程节点判断rabbitmqctl shutdown在--wait模式下推断目标节点是否为远程节点时改用节点名node name而非gethostname(2)rabbitmq/rabbitmq-cli#327。这样会显式考虑用户设置的节点名以及ERL_INETRC配置同时所有名字中带localhost的节点都被视为本地节点与 broker 运行在同一主机。2. forget_cluster_node 错误信息更友好当要求移除一个仍运行着 RabbitMQ 应用的节点时rabbitmqctl forget_cluster_node现在会给出更明确的错误提示rabbitmq/rabbitmq-cli#323避免用户困惑于“为什么删不掉”。3. 新命令rabbitmqctl force_gc新增命令rabbitmqctl force_gc用于请求目标节点上所有进程执行/调度一次 fullsweep 垃圾回收rabbitmq/rabbitmq-cli#319。这在排查内存占用、验证“回收后内存是否回落”时非常有用也常被内存分析指南DocGuide 中对应 memory use 一节引用。该命令的实现位于 force_gc_command.ex核心是向目标节点发起 RPC 调用rabbit_runtime:gc_all_processes/0def run([], %{node: node_name, timeout: timeout}) do :rabbit_misc.rpc_call(node_name, :rabbit_runtime, :gc_all_processes, [], timeout) endgc_all_processes/0也用于节点启动完成后的主动回收——在 rabbit.erl 中broker 启动流程标记节点 ready 之后会调用它%% Now that everything is ready, trigger the garbage collector. With %% Khepri enabled, it seems to be more important than before; see #5515 %% for context. _ rabbit_runtime:gc_all_processes(), ok命令帮助信息用法force_gc描述让目标节点上所有 Erlang 进程执行/调度一次 full sweep 垃圾回收所属帮助分组operations提示横幅Will ask all processes on node node to schedule a full sweep GC4. 所有 CLI 工具支持 --version 与 version 子命令所有 RabbitMQ CLI 工具rabbitmqctl、rabbitmq-plugins、rabbitmq-diagnostics等现在既支持--version标志也支持version子命令rabbitmq/rabbitmq-cli#314统一了版本查询方式。Management 插件变更Bug 修复1. rabbitmqadmin 的 vhost_limit 声明/删除缺少 vhost 参数rabbitmqadmin的declare vhost_limit与delete vhost_limit之前不支持vhost参数rabbitmq/rabbitmq-management#667导致无法针对指定虚拟主机操作限额。本版本补齐了该参数现在可以按如下形式使用rabbitmqadmin declare vhost_limit vhostvhost名称 limitmax-connections value100 rabbitmqadmin delete vhost_limit vhostvhost名称 limitmax-connections2. PUT /api/vhost-limits/{vhost}/{limit} 文档措辞修正Management HTTP API 中PUT /api/vhost-limits/{vhost}/{limit}的接口文档此前描述不正确、措辞令人困惑rabbitmq/rabbitmq-management#667本版本一并修正使 vhost 限额 API 的用法说明与实现一致。Debian 与 RPM 软件包变更Bug 修复Debian 与 RPM 软件包在安装后脚本post installation scripts中不再 source/etc/profilerabbitmq/rabbitmq-server-release#93。此前在无人值守/容器化等无登录 shell 环境下source/etc/profile可能引入意外的环境变量或告警移除后软件包安装更干净、更可预测。Federation 插件变更Bug 修复Federation 链接federation links可能以{error, already_started}启动失败rabbitmq/rabbitmq-federation#84。该错误通常源于上游链接状态机的重复启动竞争链接已在运行却被再次触发启动。本版本修复了这一竞态使链接在重连、配置变更等场景下能稳定恢复。Shovel 插件变更Bug 修复AMQP 1.0 端点 URI 可能解析失败rabbitmq/rabbitmq-amqp1.0-client#23。Shovel 支持将 AMQP 1.0 作为源或目标端点此前某些合法 URI 形式如特定 scheme 或 query 写法无法被正确解析导致 Shovel 任务无法创建。修复后 AMQP 1.0 端点 URI 的解析与 AMQP 0-9-1 端点保持一致配置更不容易踩坑。HTTP AuthN/AuthZ 后端插件变更增强用户标签user tags现在以空格分隔的字符串形式传递给 vhost、资源与 topic 授权检查端点rabbitmq/rabbitmq-auth-backend-http#79由 romerod 贡献。在 rabbit_auth_backend_http.erl 中可以看到vhost 访问、资源访问与 topic 访问三类检查请求都会附带{tags, join_tags(Tags)}参数do_check_vhost_access(Username, Tags, VHost, Ip, AuthzData) - OptionsParameters context_as_parameters(AuthzData), req(vhost_path, [{username, Username}, {vhost, VHost}, {ip, Ip}, {tags, join_tags(Tags)}] OptionsParameters).join_tags/1将标签列表拼接为空格分隔的字符串空列表返回空字符串join_tags([]) - ; join_tags(Tags) - ...这意味着后端 HTTP 服务vhost/资源/topic 授权端点现在可以在请求参数中读取用户的所有标签例如administrator、monitoring据此实现基于角色的授权逻辑。例如一个带monitoring标签的用户其授权请求会携带tagsmonitoring若同时有多个标签则为空格分隔如tagsadministrator monitoring。Trust Store 插件变更Bug 修复Trust Store 的HTTP provider 在证书及其Last-Modified响应头更新后未能正确更新If-Modified-Since请求头rabbitmq/rabbitmq-trust-store#68。修复逻辑位于 rabbit_trust_store_http_provider.erl新状态从响应头中读取Last-Modified并用其合并ukeymerge更新后续请求的If-Modified-Since头new_state(RespHeaders, #http_state{headers Headers0} State) - LastModified0 proplists:get_value(last-modified, RespHeaders), LastModified1 proplists:get_value(Last-Modified, RespHeaders, LastModified0), case LastModified1 of undefined - State; Value - Headers1 lists:ukeysort(1, Headers0), NewHeaders lists:ukeymerge(1, [{If-Modified-Since, Value}], Headers1), State#http_state{headers NewHeaders} end.修复前一旦源端证书更新导致响应头时间变化provider 仍沿用旧的If-Modified-Since可能拿到过期缓存或造成不必要的重复拉取修复后基于最新Last-Modified维护条件请求保证 Trust Store 中证书集始终与源端同步。源码归档说明GitHub 提供的源码归档仅包含 broker 本体源码不包含插件与客户端库如需完整内容请下载名为rabbitmq-3.7.13.tar.gz的归档。升级与运维要点速览前置检查确认 Erlang/OTP ≥ 20.3从旧版本升级且同时升 Erlang 到 21.x 时务必先升 RabbitMQ 再升 Erlang。关注点binding 操作、Proxy protocol 连接清理、队列删除时的消费者事件、topic 授权性能等核心修复对高并发生产环境有直接收益。新工具rabbitmqctl force_gc可随时对节点做全量 fullsweep GC用于内存问题排查。运维脚本rabbitmqadmin操作 vhost_limit 时需显式传vhost参数。插件侧Federation 链接already_started、Shovel 的 AMQP 1.0 URI 解析、HTTP 授权标签传递、Trust Store 条件请求头同步均已在 3.7.13 中修复或增强。赞分享后端消息队列消息路由【免费下载链接】rabbitmq-serverOpen source RabbitMQ: core server and tier 1 (built-in) plugins项目地址https://gitcode.com/gh_mirrors/ra/rabbitmq-server点击查看免费下载相关推荐RabbitMQ 3.8.12 维护版本解析核心修复、CLI 新命令与插件增强RabbitMQ 3.8.12 维护版本解析核心修复、CLI 新命令与插件增强 导读 本文基于当前仓库中的 3.8.12 发布说明 https://link.后端消息队列消息路由RabbitMQ 3.10.11 维护版本发布解读核心服务器、CLI、AMQP 1.0 与各内置插件修复全览RabbitMQ 3.10.11 维护版本发布解读核心服务器、CLI、AMQP 1.0 与各内置插件修复全览 RabbitMQ 3.10.11 是 3.10.后端消息队列消息路由Composio TypeScript SDK 自定义 Provider 开发指南从工具格式化到 Agent 框架接入Composio TypeScript SDK 自定义 Provider 开发指南从工具格式化到 Agent 框架接入 本指南以 Composio 仓库中的后端消息队列消息路由上一篇在 Nhost 中实现文档全文搜索bleve 嵌入式搜索引擎的用法与源码剖析下一篇终极指南如何用GitHub Action自动Rebase提升代码管理效率创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考