通过设计使您的后台任务可中断和可恢复。
Job Iteration API 介绍 Iteration 是一个扩展 ActiveJob,使您的作业可以中断和恢复,并保存作业所做的所有进度(也称为作业的检查点)。 背景 设想以下作业: ruby class SimpleJob(Cursor) { enumeratorbuilder.activerecordonrecords(Shop.all, Cursor: Cursor) }, -(shop, Cursor) { enumeratorbuilder.activerecordonrecords(shop.products, Cursor: Cursor) }, -(shop, product, Cursor) { enumeratorbuilder.activerecordonbatchrelations(product.productvariants, Cursor: Cursor) } ], Cursor: Cursor ) end def eachiteration(productvariantsrelation) # do something end end Iteration 从底层就针对最流行的队列适配器进行了支持,以支持优雅的中断。不需要额外的配置。 支持的依赖项 Job-iteration 目前支持以下队列适配器(按实现顺序排列): - Resque - Sidekiq - GoodJob - Solid Queue - Amazon SQS - Delayed::Job 它支持以下平台: - Ruby 3.1 及更高版本 - Rails 7.1 及更高版本 对于已经到达生命周期末期的旧平台,如果维护向后兼容性麻烦,可能会偶尔不再支持。 指南 Iteration: 它是如何工作的 Job 参数语义 最佳实践 编写自定义枚举器 限流 平行迭代 如需详细文档,请参阅 rubydoc。 要求 Active Job 是 Iteration 的主要要求。对于 Sidekiq 中不使用 Active Job 的迭代,请参阅 Sidekiq Iteration。 API Iteration 作业必须响应 buildenumerator 和 eachiteration 方法。 buildenumerator 必须返回一个 Enumerator 对象,该对象必须尊重 Cursor 值。 Sidekiq 适配器 在 Sidekiq 上运行迭代作业应该使用默认配置。最重要的设置是 Sidekiq 的超时选项,默认为 25 秒。这允许最后的 eachiteration 完成并优雅地关闭。 Resque 适配器 对于 Iteration 与 Resque 协作工作,需要一些配置假设。GRACEFULTERM 必须启用(使作业能够优雅中断),并且建议禁用 FORKPERJOB(设置为 false)。 常见问题 为什么我不能在 #perform 方法中迭代并做我想做的事情呢?您可以这样做,…
暂无开放 Issues,或尚未同步最近议题。