我在我的应用程序中使用Rails 4,这就是我创建新工作的方式:
class FetchJob < ActiveJob::Base
queue_as :fetchjob
def perform num
puts num
sleep 30
end
end
此代码打印出num
的值,然后睡眠30秒。我使用sidekiq gem和redis来处理这个队列。我在创建用户后将作业排队。
class FecthJobController < ApplicationController
def create
@user = User.create(user_params)
FetchJob.perform_later(@user.id)
end
private
def user_params
....
end
end
队列中的作业正在并行执行。通过队列中的作业,我的意思是job1,job2,job3,job4等等。那我怎么可能顺序执行这些工作呢。即只有当job1完成时,它才会处理job2然后处理job3,依此类推。如何在sidekiq完成作业之前将其锁定?
答案 0 :(得分:2)
你可能会发现一个允许你做你想做的事的黑客但是让我建议别的东西:你使用的是错误的工具。 Sidekiq不是为那种方式设计的。
https://github.com/mperham/sidekiq/wiki/Best-Practices#3-embrace-concurrency