【发布时间】:2021-10-18 14:36:09
【问题描述】:
在再次入队之前,我必须检查是否已将相同的作业添加到队列中。
目前我使用此代码,但效率非常低,因为它将所有对象加载到内存中。有没有办法像普通的活动记录一样查询?
理想情况下,我会喜欢
Sidekiq::Queue.where(job_class: "SyncJob", queue_name:"high", arguments: [1,2,3])
当前代码:
def list_queued_jobs(job_class, queue_name, arguments)
found_jobs = []
queues = Sidekiq::Queue.all
queues.each do |queue|
queue.each do |job|
job.args.each do |arg|
if arg['job_class'].to_s == job_class.to_s && arg['queue_name'] == queue_name && ActiveJob::Arguments.deserialize(arg['arguments']) == arguments
found_jobs << job
end
end
end
end
return found_jobs
end
【问题讨论】:
标签: ruby-on-rails sidekiq rails-activejob