在我的应用程序有25名工人被随机使用不同的用户行为。
只有一个同时(活性/忙)的工作是由每个用户允许的。
它不能被阻挡在控制器上,因为想法是不阻止行为产生。 操作需要创建,但持有一行直至由同一用户所有previos请求进行处理,之后才是一个工人将(重新)-assigned为相同的用户。
如果另一个用户,在此期间,请求创造就业机会,它应该如果剩余的24名工人中的至少一个可瞬间启动。
有没有什么办法来寻找队列行并使用它的参数来构建加工条件?
谢谢
在我的应用程序有25名工人被随机使用不同的用户行为。
只有一个同时(活性/忙)的工作是由每个用户允许的。
它不能被阻挡在控制器上,因为想法是不阻止行为产生。 操作需要创建,但持有一行直至由同一用户所有previos请求进行处理,之后才是一个工人将(重新)-assigned为相同的用户。
如果另一个用户,在此期间,请求创造就业机会,它应该如果剩余的24名工人中的至少一个可瞬间启动。
有没有什么办法来寻找队列行并使用它的参数来构建加工条件?
谢谢
您可以使用Sidekiq 独特的乔布斯
这种方法仅1个作业使用相同的PARAMS将同时存在。
所以建立模型
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)