如何在Rails中的Redis和SideKiq中按顺序处理队列?

时间:2016-05-02 09:18:11

标签: ruby-on-rails ruby redis sidekiq sidekiq-superworker

我在我的应用程序中使用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完成作业之前将其锁定?

1 个答案:

答案 0 :(得分:2)

你可能会发现一个允许你做你想做的事的黑客但是让我建议别的东西:你使用的是错误的工具。 Sidekiq不是为那种方式设计的。

https://github.com/mperham/sidekiq/wiki/Best-Practices#3-embrace-concurrency