Sidekiq 多个依赖作业,何时完成或重试?

Sidekiq multiple dependant jobs, when to completed or retry?

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

的模型

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

当用户请求生成报告时,通过使用 Sidekiq,我将 "chunk's jobs" 排队以便在后台 运行 他们并通知用户我们将通过电子邮件发送给他们生成报告后的结果。

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

我将状态确定为draft (default)workingfinished 完成结果是所有服务片段的组合。 'Draft' 是当块仍在队列中并且其中 none 已开始生成任何内容时。

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

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

谢谢

我们的应用程序也有类似的需求,以确定在自动化测试期间 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

希望对您有所帮助。

这是一个称为批处理的 Sidekiq Pro 功能。

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