Sidekiq独特的工作处理

时间:2015-03-24 10:05:58

标签: ruby-on-rails-4 redis capistrano resque sidekiq

我需要确保每个user_id不超过一个作业同时由25名工作人员工作以避免死锁。

我已尝试过sidekiq独特的工作但死锁仍在继续,因为它一直试图处理队列中的所有待处理作业而不在params上查找user_id。

谢谢

  

类MyWork
  包括Sidekiq ::工作人员     sidekiq_options:queue =>   " critical",unique:true,                     unique_args: - >(args){[args.user_id]}

     

def perform(work_params)

1 个答案:

答案 0 :(得分:2)

sidekiq_option args是一个阵列,您的works_params位于第一个位置。然后你应该这样做:

class MyWork
  include Sidekiq::Worker
  sidekiq_options :queue => "critical", unique: until_executed, 
                   unique_args: ->(args) { [ args.first.user_id ] }

  def perform(work_params)

请注意,unique: true已弃用,因此您应使用unique: until_executed或最适合您的工作人员的任何内容。有关其他选项,请参阅here