首页 > 解决方案 > 在 Rails 中跟踪 sidekiq 作业

问题描述

我有一个名为 Book 的模型,该模型有一种方法可以在后台生成大量 Sidekiq 作业,该方法会根据特定条件生成额外的 Sidekiq 作业。

我正在尝试开发一种简单的方法,通过能够从模型中跟踪它们来从本质上管理这些 Sidekiq 作业。换句话说,我希望能够暂停、删除或重新安排所有链接回特定书籍的作业。

我尝试做的一件事是创建一个BookMonitor模型belongs_to :book,而 Book has_one :book_monitor。这里的属性BookMonitor基本上是book_id:integer并且worker_ids:text被序列化为一个数组。

我唯一担心的是如何基本更新worker_ids. 例如:

class Book < ApplicationRecord
   def add_jid_to_monitor(jid)
      worker_jids = book_monitor.worker_ids
      book_monitor.update(worker_ids: worker_jids << jid)
   end
end

class RandomWorker
   def perform
      Book.find(1).add_jid_to_monitor(self.jid)
   end
end

如果两个工作人员同时运行,这不会导致问题,因为该add_jid_to_monitor方法会尝试检索worker_ids?

有没有更好的方法来管理这样的事情?

标签: ruby-on-railssidekiq

解决方案


推荐阅读