#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
?
Есть ли лучший способ справиться с чем-то подобным?