Отслеживание заданий sidekiq в Rails

#ruby-on-rails #sidekiq

Вопрос:

У меня есть модель с именем Book, и в этой модели есть метод, который порождает множество заданий Sidekiq в фоновом режиме, что порождает дополнительные задания sidekiq в зависимости от определенных условий.

Я пытаюсь разработать простой способ по существу управлять этими заданиями Sidekiq, имея возможность отслеживать их по модели. Другими словами, я хотел бы иметь возможность приостанавливать, удалять или переносить задания, которые все связаны с определенной Книгой.

Одна вещь , которую я пытался сделать, — это создать BookMonitor модель, которая belongs_to :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 ?

Есть ли лучший способ справиться с чем-то подобным?