BullMQ Rust 支持版本演进全解析(1.0.0 → 1.3.0):从功能首发到 Node.js API 对齐
后端消息队列任务调度【免费下载链接】bullmqBullMQ - Message Queue and Batch processing for NodeJS, Python, .NET, Elixir, Rust and PHP based on Redis or PostgreSQL项目地址https://gitcode.com/gh_mirrors/bu/bullmq点击查看免费下载本篇技术指南以 rust/changelog.md 为骨架系统梳理 BullMQ 项目对 Rust 语言支持的完整版本演进脉络从 1.0.0 首发时覆盖队列、Worker、Job、调度器与流程编排的庞大功能矩阵到 1.1.0 的 Builder 风格 API 重构再到 1.2.x 系列密集的缺陷修复、安全补丁与依赖升级以及 1.3.0 新增的get_dependencies查询能力。读者读完本文后既能看清每个版本的功能增量与修复动机也能通过仓库源码理解这些能力背后的实现原理Lua 脚本嵌入、EVALSHA/EVAL 回退、连接池与 TLS 支持等从而在项目选型、升级与排障时做到心中有数。版本总览一次看清单个版本的发布节奏Rust 支持crate 名为bullmq-official库导入名为bullmq见 rust/Cargo.toml在 2026 年 7 月 12 日发布 1.0.0此后约每 13 周迭代一个小版本。按 changelog 整理的全量发布记录如下版本发布日期类型核心内容1.3.02026-09-22FeatureQueue 新增get_dependencies方法1.2.102026-09-18Bug Fix去重任务键已不存在时移除去重键Python/Elixir/ PHP/Rust/.NET 同步修复1.2.92026-09-10Bug Fix依赖升级uuidv1.26.1、rediscrate v1.7.01.2.82026-08-30Bug Fix依赖升级msgpackr 2.1.0、uuid 1.26.01.2.72026-08-25Performance处理延期失败deferred failures时不再影响速率限制计数Python/Elixir/Rust/.NET1.2.62026-08-23Bug Fix依赖升级uuidv1.25.01.2.52026-08-15Performance加载 Lua 脚本前先检查脚本是否已存在Rust 与 Elixir1.2.42026-08-13Bug Fix依赖升级futuresv0.3.341.2.32026-08-07Bug FixWorker 领取新任务时的延迟问题修复#45121.2.22026-08-01Bug Fix应用安全补丁更新1.2.12026-07-30Bug Fix锁定依赖版本redis依赖安全更新1.1.02026-07-15Feature公共 API 全面引入惯用的 Builder 风格builder-based ergonomics1.0.12026-07-14PerformanceWorker 在同一个 finished 往返中顺带拉取下一个任务1.0.02026-07-12Feature初始实现 大批量功能首发说明changelog 中每个版本附带的 issue/PR 链接为上游 GitHub 地址本文以仓库内实际源码与测试为事实依据展开解读不引用外部链接。1.0.0 首发一整套完整的 Rust 任务队列能力1.0.0 是 Rust 支持的初始实现其 changelog 条目本身就是一张功能清单。这些能力现在都能在仓库中逐一找到对应实现构成了后续所有版本的底座。Queue入队、管理与状态查询changelog 中列出的 Queue 首发能力包括add、addBulk、pause、resume、drain、obliterate、clean、retryJobs、promoteJobs以及速率限制与全局并发控制rate_limit、set_global_rate_limit、remove_global_rate_limit、set_global_concurrency、remove_global_concurrency、任务调度器upsert_job_scheduler、get_job_scheduler(s)、remove_job_scheduler、去重支持remove_deduplication_key和丰富的 getterget_jobs、get_ranges、各状态列表、各状态计数、get_counts_per_priority等。从源码看rust/src/queue.rs 中Queue结构体只保存三样东西队列名、QueueKeysRedis key 生成器与RedisConnection再加上一份default_job_options作为每次add的默认合并基准。客户端在入队前还会执行校验逻辑rust/src/queue.rs检查size_limit字节上限、校验自定义jobId不能为0或0:开头这与 Node.js 的Job.validateOptions一一对应。创建队列的三种方式在 rust/src/queue.rs 中体现Queue::new(name)使用默认连接redis://127.0.0.1:6379与bull前缀Queue::with_options(name, opts)自定义连接、前缀与默认任务选项创建时即写入队列元数据update_metaQueue::with_connection(name, conn, opts)复用外部已有的RedisConnection。Worker并发处理、卡死检测与锁续期Worker 首发能力覆盖并发处理concurrent processing、卡死任务检测stalled job detection、锁续期lock renewal、暂停/恢复以及对RateLimited/NextTimestamp取回结果的专门处理。在 rust/src/worker.rs 中处理器被定义为一个ProcessorFn类型别名Arcdyn Fn(Job, CancellationToken) - PinBoxdyn Future ... Send Sync。IntoProcessortrait 让Worker::new既能接受普通的 async 闭包也能接受已装箱的ProcessorFn兼顾了写法简洁与 FFI 友好。Worker 事件模型WorkerEvent在 rust/src/worker.rs 中定义了Completed、Failed、Stalled、Active、Progress、Drained、Ready、Closed等变体供进程内监听。Job进度、日志、重试与状态查询Job 侧的首发能力包括进度跟踪progress tracking、日志logging、重试retry、状态查询state queries与手动迁移操作manual move operations后续补充了clear_logs、discard、is_waiting_children、get_ignored_children_failures、get_dependencies、move_to_waiting_children等。Backofffixed / exponential / 自定义回调退避策略首发即支持三种固定间隔fixed、指数退避exponential与自定义异步回调custom。自定义回调的类型签名定义在 rust/src/options.rsFn(u32, str, str, serde_json::Value) - FutureOutput i64即接收已尝试次数、退避类型、错误消息、任务数据返回下一次重试前的延迟毫秒数返回-1表示不再重试。CancellationToken协作式取消Rust 版用协作式取消令牌取代了 Node.js 的 AbortController。实现见 rust/src/worker.rs内部是一个ArcAtomicBool加一个tokio::sync::Notify提供is_cancelled()、cancel()与cancelled()可 await 的等待取消三个方法处理器可以在长任务中主动轮询或 await实现干净的中断。与 Node.js / Python 队列的完全兼容changelog 明确声明full compatibility with Node.js/Python BullMQ queuessame Lua scripts。这在实现上有两层证据脚本注册表 rust/src/scripts.rs 在编译期通过include_str!内嵌rust/src/commands/下生成的全部 Lua 脚本这也是 rust/README.md 所说的Zero-copy Lua scripts执行时统一走EVALSHA遇到NOSCRIPT错误再回退EVALrust/src/scripts.rs与 Node.js 端行为一致ensure_loaded则面向管道化场景提前用SCRIPT LOAD预加载。这意味着 Rust、Node.js、Python 等客户端可以同时消费同一批 Redis key 与脚本语义做到队列级别的数据互通。完整的对 Node.js 能力对齐情况见 rust/FEATURE_PARITY.md。Scheduler 与 FlowProducer调度器支持 cron 调度changelog 注明基于croner与chrono-tz两个 crate 实现在 rust/Cargo.toml 中锁定版本FlowProducer支持add、add_bulk、add_with_opts按队列设定默认任务选项、get_flow并实现failParentOnFailure、removeDependencyOnFailure、ignoreDependencyOnFailure、continueParentOnFailure四种父子失败传播策略。连接层typed options 与 TLSchangelog 提到连接支持 typed optionshost/port/username/password/db与 TLSrediss://。对应的RedisConnectionOptions定义在 rust/src/options.rs默认连接池大小max_connections 4、默认 URLredis://127.0.0.1:6379rust/src/options.rs。effective_url()rust/src/options.rs展示了 URL 的拼接规则设置host时按 typed 字段组装 URL否则直接使用urltls_certs存在时还会自动把redis://升级为rediss://。TLS 层还支持通过TlsCertsrust/src/options.rs提供 PEM 格式的自签名根证书与客户端证书/私钥mTLS。1.0.1Worker 单次往返顺带拉取下一任务1.0.12026-07-14是一个性能优化版本Worker 在提交任务 finished 状态的同一次 Redis 往返中顺带拉取下一个待处理任务do fetch next job in same finished roundtrip。这一改动的价值在于减少一次网络往返延迟让连续任务之间的切换更平滑属于典型的吞吐优化后续在 1.2.x 中的 rate-limit 相关优化与之同属减少不必要 Redis 交互的思路。1.1.0Builder 风格 API 的普及1.1.02026-07-15将idiomatic builder-based ergonomics推广到整个公共 API[#4288]。这是 Rust 版在首发功能矩阵稳定后把重点转向使用体验的信号通过 Builder 模式为QueueOptions、WorkerOptions、JobOptions、RedisConnectionOptions等配置结构提供链式构造能力让只改其中一个字段的常见诉求从..Default::default()的冗长写法中解放出来。这一版本奠定了 Rust 版配置项类型 builder的对外形态也与其 FFI-ready对外绑定 Go/C#/Python 等语言的目标保持一致——trait 化的处理器与Send Sync的公共类型rust/src/lib.rs降低了对外暴露的复杂度。1.2.x 系列安全、稳定性与依赖锁定1.2.x 系列共 8 个补丁版本主题集中在三方面依赖升级与安全修复、行为缺陷修复、性能微调。依赖升级与安全1.2.1、1.2.2、1.2.4、1.2.6、1.2.8、1.2.9版本变更对应仓库现状1.2.1锁定依赖版本pin dependenciesredis依赖安全更新当前 rust/Cargo.toml 全部采用精确锁定例如redis 1.7.0、tokio 1.53.1、serde 1.0.2291.2.2应用安全补丁更新security patches—1.2.4futures升级至 v0.3.34rust/Cargo.toml 当前为futures 0.3.341.2.6uuid升级至 v1.25.0—1.2.8msgpackr 升级至 2.1.0任务数据序列化相关、uuid 升级至 1.26.0—1.2.9uuid升级至 v1.26.1rediscrate 升级至 v1.7.0rust/Cargo.toml 当前为uuid 1.26.1、redis 1.7.0从中可以读出的工程惯例是Rust 版对关键依赖全部采用精确版本锁定约束配合 Renovate 式的自动化升级 PR以小幅高频的方式滚动吸收上游修复同时把锁版本作为可复现构建与安全治理的基线。redis1.7.0 启用的 feature 组合rust/Cargo.toml包括tokio-comp、connection-manager、script、tokio-rustls-comp与tls-rustls-webpki-roots这正对应前文提到的连接池connection-manager、脚本执行script与 TLS 能力。行为缺陷修复1.2.3、1.2.101.2.3修复 Worker 领取新任务时的延迟问题issue #4512。该问题影响 worker 在任务间隙停太久再继续拉取的行为修复后 Worker 能更快接上下一个任务属于对并发吞吐有直接感知的修正。1.2.10多语言同步修复去重逻辑——remove deduplication key if job key does not longer existPython/Elixir/PHP/Rust/.NET 一起发布issue #4768。含义是当去重键对应的任务键job key已不存在例如任务已被清理时需要把残留的去重键一并移除避免去重键无限堆积或误拦截后续同名任务。这直接关系到deduplication功能的正确性仓库中的去重相关测试见 rust/tests/deduplication_test.rs配套的 Lua 脚本包括setDeduplicationKey.lua、removeDeduplicationKeyIfNeededOnFinalization.lua与removeDeduplicationKeyIfNeededOnRemoval.lua位于 src/commands/includes/。性能优化1.2.5、1.2.71.2.5加载 Lua 脚本前先检查脚本是否已存在于 Redischeck script existence before loadingRust 与 Elixir 同步。其收益在于减少无谓的SCRIPT LOAD传输尤其对连接池中多条连接的场景可显著降低启动期的 Redis 负载。1.2.7处理延期失败deferred failures时不再计入速率限制Python/Elixir/Rust/.NET。在此之前延期失败的重试路径可能错误消耗 rate limit 配额导致合法任务被误限流修复后速率限制的计数只反映真实的处理尝试。对应源码可查看 src/commands/includes/fetchNextJob.lua 与 src/commands/includes/getRateLimitTTL.lua 中的限流计分逻辑。1.3.0Queue 级依赖查询get_dependencies1.3.02026-09-22在 Queue 上新增get_dependencies方法issue #4717与 Job 级已有的get_dependencies基于 HSCAN/SSCAN不同这是队列级别的分页依赖视图返回{items, jobs, total}三元组底层复用paginate-1.lua脚本与 rust/src/paginate.rs 的解析逻辑。对应类型定义在 rust/src/queue.rsDependencyItem一条依赖记录含子任务限定键idprefix:queue:idprocessed依赖会附带回传值v解析后的 JSON若存储值非法 JSON 则给出err解析错误消息pending依赖只有id。QueueDependencies分页结果容器包含items依赖条目、jobs按条目拉取的子任务对象与total依赖集合总条数。值得注意Job::get_dependencies在 1.0.0 首发时已经具备而 Queue 级的分页变体是 1.3.0 才补齐的这正体现了 rust/FEATURE_PARITY.md 中queue-level paginated variant的收尾工作。至此Rust 版在依赖查询上的能力已与 Node.jsQueue.getDependencies对齐。从 changelog 看 Rust 版的技术实现要点将 1.0.01.3.0 的 changelog 与仓库源码对照可以提炼出 Rust 版几个贯穿始终的实现原则同一套 Lua 脚本多语言互通所有队列原子操作入队、移动状态、限流、去重、调度器、依赖等都执行src/commands/下的同一批脚本Rust 端通过include_str!编译期内嵌 EVALSHA/EVAL回退执行rust/src/scripts.rs这是与 Node.js/Python 队列完全兼容的根基。连接管理单一化默认max_connections 4的连接池connection-manager承载所有队列操作Worker 另开阻塞连接做取任务与事件消费连接层支持 URL / typed options / TLS / mTLSrust/src/options.rs。依赖精确锁定所有关键 crate 用锁版本安全补丁与升级以 1.2.x 系列的小步快跑方式持续吸收rust/Cargo.toml。明确的能力边界changelog 与 rust/FEATURE_PARITY.md 都明确标注了刻意未实现的部分remove_orphaned_jobs等遗留维护方法、Job.wait_until_finished、Redis Cluster/Sentinel、Telemetry、沙箱处理器避免使用者产生错误预期。版本演进对使用者的实际意义升级节奏1.0.x1.3.0 之间的 API 保持稳定1.1.0 引入的 builder 风格是唯一一次面向使用的较大重构如果你是从 1.0.x 起步升级到 1.3.0 主要收获是大量安全补丁与 1.2.7限流计数修正、1.2.10去重键清理两个行为修复建议优先升级。运行前提Rust 版要求 Rust 1.85 与 Redis 6.2见 rust/README.md使用前请核对环境。测试验证本地跑通测试的方式是yarn generate:raw:scriptsyarn copy:lua:rustcargo test并可通过REDIS_URL指定测试用 Redis 地址rust/README.md注意rust/src/commands/下的 Lua 脚本是生成的产物改动上游脚本后需要重新生成。能力边界若你的场景依赖 Redis Cluster/Sentinel 或 OpenTelemetry 遥测目前 Rust 版尚未覆盖需评估替代方案或等待后续版本。小结从 2026-07-12 的 1.0.0 到 2026-09-22 的 1.3.0BullMQ Rust 版走完了功能首发 → API 体验重构 → 安全与稳定性加固 → 缺口能力补全的完整演进路径。changelog 是这条路径最直观的切片首发版本用一条 20 余项的 feature 清单定义了 Rust 版的全部能力边界后续 12 个补丁版本则分别承担了性能1.0.1、1.2.5、1.2.7、安全1.2.1、1.2.2、正确性1.2.3、1.2.10与依赖健康1.2.4/1.2.6/1.2.8/1.2.9的职责。结合仓库源码rust/src/ 下的 queue、worker、job、options、scripts 等模块阅读 changelog可以更准确地理解每个条目背后的实现含义也为后续版本的评估提供了参照。赞分享后端消息队列任务调度【免费下载链接】bullmqBullMQ - Message Queue and Batch processing for NodeJS, Python, .NET, Elixir, Rust and PHP based on Redis or PostgreSQL项目地址https://gitcode.com/gh_mirrors/bu/bullmq点击查看免费下载相关推荐gh_mirrors/cp/cp-notebook字符串算法深度解析高效解决方案gh_mirrors/cp/cp notebook字符串算法深度解析高效解决方案 在 competitive programming竞赛编程领域字符串算botbuilder-adapter-twilio-sms 版本演进全解析从首版发布到 enable_incomplete 与 Botkit/Bot Framework 依赖对齐botbuilder adapter twilio sms 版本演进全解析从首版发布到 enable_incomplete 与 Botkit/Bot Fram后端即时通讯Globalize版本更新详解从1.3.0到1.7.1的功能演进Globalize版本更新详解从1.3.0到1.7.1的功能演进 Globalize是一个强大的JavaScript国际化库它利用官方Unicode CLD前端上一篇开源项目推荐Yii2 Queue Extension —— 异步任务处理的得力助手下一篇深入解读 Hardhat 的错误体系从 nomicfoundation/hardhat-errors 到 HHE 错误码与版本演进创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考