【问题标题】:Sidekiq multiple dependant jobs, when to completed or retry?Sidekiq 多个依赖作业,何时完成或重试?
【发布时间】:2020-06-06 14:37:46
【问题描述】:

在我的 Rails 应用程序中,我有一个名为 Report 的模型

报告有一个或多个块(称为Chunk),它们会根据外部服务调用(API 等)生成一段内容

当用户请求生成报告时,通过使用Sidekiq,我将“块的作业”排队以便在后台运行它们并通知用户我们将在生成报告后通过电子邮件将结果发送给他们。

Report 使用状态机来标记是否所有作业都已成功完成。在我们将报告标记为就绪之前,必须完成所有块。如果失败了,我们要么再试一次,要么在某个时候放弃。

我将状态确定为draft (default)workingfinished 最终结果是所有服务部分的组合。 “草稿”是当块仍在队列中并且它们都没有开始生成任何内容时。

您将如何使用 Sidekiq 解决这种情况?您如何跟踪(实时)哪些块的服务已完成、工作或失败,以便我们可以标记报告已完成或失败?

我希望找到一种方法来定期检查作业以查看它们的位置,并在它们全部成功完成时更改状态,或者如果所有重试都放弃,则将其标记为失败!

谢谢

【问题讨论】:

    标签: ruby-on-rails sidekiq


    【解决方案1】:

    我们在应用程序中也有类似的需求,以确定在自动化测试期间 sidekiq 作业何时完成。

    我们使用的是sidekiq-status gem:https://github.com/utgarda/sidekiq-status

    这是粗略的用法:

    job_id = Job.perform_async()
    

    然后您将作业 ID 传递到它将尝试检查作业状态的位置

    Sidekiq::Status::status job_id #=> :working, :queued, :failed, :complete
    

    希望这会有所帮助。

    【讨论】:

    • 非常感谢
    【解决方案2】:

    这是一个名为 Batches 的 Sidekiq Pro 功能。

    https://github.com/mperham/sidekiq/wiki/Batches

    【讨论】:

    • 非常感谢
    猜你喜欢
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多