Sidekiq工作条件

Sidekiq work conditions

在我的应用程序中,我有 25 个 worker,它们被不同用户的操作随机使用。

每个用户只允许同时进行一项(活动/忙碌)工作。

它不能在控制器上被阻止,因为这个想法是不阻止动作创建。需要创建操作,但要保持一致,直到处理完同一用户的所有 previos 请求,然后才会为同一用户(重新)分配工作人员。

如果另一位用户在此期间请求创建工作,如果剩余 24 名工人中至少有一名可用,则应立即开始。

有什么方法可以找到队列行并使用其参数来构建处理条件?

谢谢

您可以使用 Sidekiq Unique Jobs

使用这种方法,只有 1 个具有相同参数的作业会同时存在。

所以创建模型

class UserJobs
  belongs_to :user
end

class User
  has_many :user_jobs
end

class Worker
  sidekiq_options unique: true

  def perform params
    user = User.find(params[:id])
    user.user_jobs.order('id asc').each do |job|
      job.worker_class.constantize.new.perform(job.params)
      job.destroy
    end
  end
end

比你需要 运行 用户做的任何工作:

user.user_jobs.create worker_class: Klass, params: params
Worker.perform_async(user_id: user.id)