如何使用Sidekiq运行连续的后台工作?

时间:2013-07-23 14:15:43

标签: ruby-on-rails-3 ruby-on-rails-3.2 sidekiq

我一直在成功使用Sidekiq来运行由Rails 3.2应用程序中的用户操作启动的后台作业。我的特定应用程序涉及通过第三方API从外部源发送和接收数据。

我需要通过不断检查每个用户是否有可下载的数据来保持数据与此外部源同步。

到目前为止,我所有的后台工作都是用户启动的,如上所述。我的问题是,如果我想连续检查每个用户是否存在外部数据,我想在while循环中:

# pseudocode
while true

  for user in User.active
    data = user.get_data
    next if data.blank?

    UserDataWorker.perform_async(user.id)

  end
end

然后我在哪里放上代码?我对如何产生连续任务感到困惑。我不想把代码放在Sidekiq工作者中,因为它只是一个永远不会完成的工作。或者我应该这样做?

我不想把它放在rake任务中,因为那我如何监视rake任务呢?我读到的关于Sidekiq的一切似乎都指向一个工作人员运行一个有限的任务,并且能够完成或出错。我感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:5)

Ruby多线程就是为了这个。在初始化文件夹文件夹中生成一个线程:

Thread.new do

  while true

    for user in User.active
      data = user.get_data
      next if data.blank?

      UserDataWorker.perform_async(user.id)
    end
    sleep 1

  end
end

如果您的支票不需要太多资源,那就应该没问题。