限制Rails中每个用户的后台工作人员数量

时间:2018-11-11 21:58:57

标签: ruby-on-rails sidekiq rails-activejob

我有一个Rails应用程序,其中每个用户都有特定数量的后台工作人员。

由于用户为增加可用的工作人员数量而支付了更多费用,所以我希望能够动态添加这些工作人员。

我想结合使用ActiveJobSidekiq,并考虑了以下解决方案:

  • 用户注册时,我在sidekiq中与用户的id创建了一个新队列。
  • 我添加了一些工人,专用于该特定队列,具体取决于用户支付的费用。

在使用Sidekiq实施此解决方案时遇到问题,我找不到有关如何动态添加队列和工作程序的文档。

1 个答案:

答案 0 :(得分:1)

如果要执行此操作,请尝试以下操作:

  • 将所有有限的工作包装在柜台上。
  • 在启动/出队作业上检查此用户是否具有运行它的能力。
  • 如果是,则作业运行。如果没有,它将重新安排自己的时间。

遵循以下原则:

class MyWorker
  def perform(user_id, *args)
    user = User.find(user_id)
    unless user.has_available_workers
      # re-enqueue with the same args. Possibly, with a delay.
      return 
    end

    user.checkout_worker
    # do work
  ensure
    user.release_worker
  end
end