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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我如何使用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的所有内容似乎都指向一个Worker,它正在执行有限的任务,并且能够完成或出错。感谢您提供的任何帮助。

答案

Ruby多线程仅用于此目的。在初始化程序文件夹中生成一个线程:

以上是关于我如何使用Sidekiq运行连续的后台作业?的主要内容,如果未能解决你的问题,请参考以下文章

如何确保 Sidekiq 后台作业针对它们启动的同一数据库运行

Sidekiq 作业已安排,没有运行,只是消失了

ActiveJob + Sidekiq 6.0.3:如何写入日志文件?

Rspec 如何测试 Sidekiq 作业是不是计划在特定时间运行

Sidekiq 停止一项正在运行的作业

Sidekiq Rails 4.2使用活动作业还是工作者?有什么不同